hexlog มีระบบการบันทึกแรงบันดาลใจจาก log4j เขียนใน haxe
ค้นหาข้อมูลเพิ่มเติมเกี่ยวกับ hexmachina บน hexmachina.org
แอปพลิเคชันที่ใช้ hexlog API จะขอบันทึกที่มีชื่อเฉพาะจาก LogManager LogManager จะค้นหา LogGerContext ที่เหมาะสมจากนั้นรับ Logger จากนั้น หากต้องสร้างเครื่องบันทึกมันจะเชื่อมโยงกับ loggerConfig ที่มี: a) ชื่อเดียวกับ logger, b) ชื่อของแพ็คเกจพาเรนต์หรือ c) รูท loggerConfig วัตถุ LoggerConfig ถูกสร้างขึ้นจากการประกาศ Logger ในการกำหนดค่า LoggerConfig เชื่อมโยงกับ logtarget ที่ส่งมอบ LogEvents จริง
ข้อได้เปรียบที่ใหญ่ที่สุดของการใช้ hexlog ผ่าน trace มาตรฐานคือความสามารถในการปิดใช้งานคำสั่งบันทึกบางอย่างในขณะที่อนุญาตให้พิมพ์อื่นโดยไม่มีการเปลี่ยนแปลงใด ๆ ความสามารถนี้สันนิษฐานว่าพื้นที่การบันทึกนั่นคือพื้นที่ของคำสั่งการบันทึกที่เป็นไปได้ทั้งหมดได้รับการจัดหมวดหมู่ตามเกณฑ์ที่ผู้พัฒนาเลือก คนบันทึกและ LoggerConfigs มีชื่อว่าเอนทิตี ชื่อคนบันทึกเป็นตัวพิมพ์ใหญ่และพวกเขาปฏิบัติตามกฎการตั้งชื่อแบบลำดับชั้น
ลำดับชั้นการตั้งชื่อ
LoggerConfig ได้รับการกล่าวขานว่าเป็น บรรพบุรุษ ของ LoggerConfig อื่นหากชื่อของมันตามด้วย dot (
.) เป็นคำนำหน้าของชื่อ Logger ลูกหลาน LoggerConfig ได้รับการกล่าวขานว่าเป็น ผู้ปกครอง ของ เด็ก LoggerConfig หากไม่มีบรรพบุรุษระหว่างตัวเองกับ LoggerConfig ลูกหลาน
ตัวอย่างเช่น loggerConfig ชื่อ "com.foo" เป็นพาเรนต์ของ loggerConfig ชื่อ "com.foo.Bar" ในทำนองเดียวกัน "hex" เป็นผู้ปกครองของ "hex.log" และบรรพบุรุษของ "hex.log.Logger" รูปแบบการตั้งชื่อนี้ควรคุ้นเคยกับนักพัฒนาส่วนใหญ่ Root LoggerConfig อยู่ที่ด้านบนของลำดับชั้น มันยอดเยี่ยมในการที่มันมีอยู่เสมอและเป็นส่วนหนึ่งของลำดับชั้นทั้งหมด เครื่องบันทึกที่เชื่อมโยงโดยตรงกับ ROO LoggerConfig สามารถรับได้ดังนี้:
var rootLogger = LogManager . getLogger ( " " );
// or more simply
var rootLogger = LogManager . getRootLogger (); เครื่องบันทึกอื่น ๆ ทั้งหมดสามารถเรียกคืนได้โดยใช้วิธี Logmanager.getLogger แบบคงที่โดยส่งชื่อของตัวบันทึกที่ต้องการ
LoggerContext ทำหน้าที่เป็นจุดยึดของระบบบันทึก ขณะนี้เป็นไปไม่ได้ที่จะมี LoggerContexts หลายรายการ แต่คุณสามารถเปลี่ยนการใช้งาน LogGerContext ได้โดยการเปลี่ยนค่าของคุณสมบัติคง LogManager.context
ในกรณีที่คุณต้องการใช้การบันทึกภายในบริบทมาโครคุณสามารถใช้ MacroLoggerContext ที่เตรียมไว้แล้วซึ่งมีโรงงานข้อความที่กำหนดค่าไว้ล่วงหน้าและข้อความที่ออกแบบมาโดยเฉพาะสำหรับการพิมพ์
LoggerContext มี Configuration ที่ใช้งานอยู่ การกำหนดค่าประกอบด้วย logtarget ทั้งหมดตัวกรองทั่วทั้งบริบทและ loggerConfigs
ตามที่ระบุไว้ก่อนหน้านี้ Logger สามารถสร้างขึ้นได้โดยการเรียก LogManager.getLogger ตัวบันทึกเองไม่ได้ดำเนินการโดยตรง มันมีชื่อและเชื่อมโยงกับ loggerConfig มันขยาย Abstractlogger และใช้วิธีการที่จำเป็น เนื่องจากการกำหนดค่าเป็นตัวบันทึกการแก้ไขอาจเชื่อมโยงกับ loggerConfig ที่แตกต่างกันจึงทำให้พฤติกรรมของพวกเขาได้รับการแก้ไข
การเรียก LogManage.getLogger เมธอดที่มีชื่อเดียวกันจะส่งคืนการอ้างอิงไปยังวัตถุ Logger เดียวกันเสมอ นั่นหมายความว่า:
var x = LogManager . getLogger ( " something " );
var y = LogManager . getLogger ( " something " ); x และ y อ้าง ถึงวัตถุ Logger เดียวกัน ( x == y เป็น true เสมอ)
การกำหนดค่าของสภาพแวดล้อม hexlog จะทำที่การเริ่มต้นแอปพลิเคชันเสมอ
Hexlog ทำให้ง่ายต่อการตั้งชื่อตัวบันทึกโดย ส่วนประกอบซอฟต์แวร์ สิ่งนี้สามารถทำได้โดยการสร้างอินสแตนซ์ Logger ในแต่ละคลาสโดยมีชื่อ Logger เท่ากับชื่อที่ผ่านการรับรองของคลาส นี่เป็นวิธีการที่มีประโยชน์และตรงไปตรงมาในการกำหนดคนตัดไม้ เนื่องจากเอาต์พุตบันทึกมีชื่อของตัวบันทึกการสร้างกลยุทธ์การตั้งชื่อนี้ทำให้ง่ายต่อการระบุที่มาของข้อความบันทึก อย่างไรก็ตามนี่เป็นเพียงกลยุทธ์เดียวที่เป็นไปได้ในการตั้งชื่อคนตัดไม้และ hexlog ไม่ได้ จำกัด ชุดเครื่องบันทึกที่เป็นไปได้ นักพัฒนามีอิสระเสมอที่จะตั้งชื่อคนตัดไม้ตามที่ต้องการ
เพื่อความสะดวก hexlog ให้ชุดฟังก์ชั่นที่คุณสามารถนำเข้าเพื่อสร้างการโทร getLogger โดยอัตโนมัติ มันมีประโยชน์อย่างยิ่งเมื่อใช้ไฟล์ import.hx (ดูตัวอย่าง)
วิธีการอำนวยความสะดวกเพิ่มเติมคือ getLoggerByClass และ getLoggerByInstance ซึ่งมีประโยชน์ในบริบทของมาโครที่คุณไม่สามารถใช้คลาสความสะดวกสบาย hexlog
วัตถุ LoggerConfig ถูกสร้างขึ้นเมื่อมีการประกาศตัวบันทึกในการกำหนดค่าการบันทึก LoggerConfig มีชุดตัวกรองที่ต้องอนุญาตให้ LogEvent ผ่านก่อนที่จะถูกส่งผ่านไปยัง LogTarget ใด ๆ นอกจากนี้ยังมีการอ้างอิงถึงชุดของ logtarget ที่ควรใช้ในการประมวลผลเหตุการณ์
นอกเหนือจากการกรอง Loglevel อัตโนมัติ hexlog ยังมีตัวกรองที่สามารถใช้งานได้:
ข้อมูลเพิ่มเติมเกี่ยวกับตัวกรองและการกรอง
ความสามารถในการเลือกเปิดใช้งานหรือปิดการใช้งานคำขอการบันทึกตามตัวบันทึกของพวกเขาเป็นเพียงส่วนหนึ่งของรูปภาพ Hexlog อนุญาตให้บันทึกการร้องขอการบันทึกไปยังหลาย ๆ จุดหมายปลายทาง ใน hexlog พูดปลายทางการส่งออกเรียกว่า logtarget
ข้อมูลเพิ่มเติมเกี่ยวกับเป้าหมายบันทึก
บ่อยครั้งที่ผู้ใช้ต้องการปรับแต่งไม่เพียง แต่ปลายทางของเอาต์พุต แต่ยังรวมถึงรูปแบบเอาต์พุต สิ่งนี้สามารถทำได้โดยการเชื่อมโยงเลย์เอาต์กับ Logtarget เค้าโครงมีหน้าที่รับผิดชอบในการจัดรูปแบบ LogEvent ตามความต้องการของผู้ใช้ในขณะที่เป้าหมายบันทึกจะดูแลการส่งเอาต์พุตที่จัดรูปแบบไปยังปลายทาง
ข้อมูลเพิ่มเติมเกี่ยวกับเลย์เอาต์
ภายในในระบบทุกคำสั่งบันทึกจะแสดงด้วยวัตถุข้อความ
ข้อมูลเพิ่มเติมเกี่ยวกับข้อความ
// Getting logger
var logger = LogManager . getLogger ( " LoggerName " );
// Logging simple message
logger . debug ( " Some message " );
// Logging message with parameters
var name = " World " ;
logger . debug ( " Hello {} " , [ name ]);HexLog ที่สะดวกสบายหากคุณวางแผนที่จะบันทึกอย่างกว้างขวางมันเป็นวิธีปฏิบัติที่ดีที่จะได้รับ Looger ก่อนจากชั้นเรียนของคุณแล้วใช้เพื่อส่งข้อความของคุณ
import hex . log . HexLog . * ; // Import all convenience functions
// If you're planning to use logger extensively, first get logger for your class
var logger = getLogger ();
// Gets replaced with:
// var logger = hex.log.LogManager.getLogger("my.current.class");
logger . debug ( " Hello world! " ); // you can now use logger as usualหากคุณต้องการคำสั่งดีบั๊กอย่างง่ายและคุณไม่กังวลเกี่ยวกับประสิทธิภาพคุณสามารถใช้ฟังก์ชั่นที่เป็นนามธรรมมากขึ้น
import hex . log . HexLog . * ; // Import all convenience functions
debug ( " Hello world " );
info ( " Hello world " );
warn ( " Hello world " );
error ( " Hello world " );
fatal ( " Hello world " );
// Gets replaced with:
// hex.log.LogManager.getLogger("my.current.class").debug("Hello world");
// ... etc // -- You can see this working in hex.log.ConfigurationTest.hx
// Create a new configuration
var configuration = new BasicConfiguration ();
// Create log targets
var traceTarget = new TraceLogTarget ( " Trace " , null , new DefaultTraceLogLayout ());
// Create a logger config and add targets
// (at this point we can also add filters to the configuration etc.)
var lc1 : LoggerConfig = LoggerConfig . createLogger ( " hex " , LogLevel . WARN , null , null ); // Logger will only forward warnings and higher
lc1 . addLogTarget ( traceTarget , LogLevel . ALL , null ); // Target will accept every event that arrives (in this case only warnings+ will be forwarded from the logger anyway)
configuration . addLogger ( lc1 . name , lc1 ); // Add logger config to the configuration
// Apply the configuration
LoggerContext . getContext (). setConfiguration ( configuration );
// Now you can request loggers and log as much you want and they will follow the rules set above
var logger = LogManager . getLogger ( " hex " );
logger . debug ( " test " ); // Fitered by config -> nothing will happen
logger . warn ( " test " ); // will be logged
var logger2 = LogManager . getLogger ( " hex.log " );
logger2 . debug ( " test " ); // Fitered by parent config -> nothing will happen
logger2 . warn ( " test " ); // will be logged
// NOTE: By default root logger is set to LogLevel.ERROR
var logger3 = LogManager . getLogger ( " something " );
logger3 . debug ( " test " ); // Filtered by root logger -> nothing will happen
logger3 . error ( " test " ); // will be logged