Hexlog包含受Haxe啟發的log4j啟發的記錄系統
在Hexmachina.org上查找有關Hexmachina的更多信息
使用Hexlog API的應用程序將請求Logmanager中具有特定名稱的Logger。 LogManager將找到適當的LoggerContext,然後從中獲取記錄器。如果必須創建記錄器,它將與包含包含的LoggerConfig關聯:a)與記錄器相同的名稱,b)父套件的名稱,或c)root loggerconfig。 LoggerConfig對像是由配置中的Logger聲明創建的。 LoggerConfig與實際交付logevents的Logtargets關聯。
與標準trace相比,使用hexlog而不是標準跟踪的最大優點是能夠禁用某些日誌語句,同時允許其他任何更改打印其他日誌語句。該功能假設記錄空間(即所有可能的記錄語句的空間)根據某些開發人員選擇的標准進行分類。登錄器和LoggerConfig被命名為實體。記錄儀名稱對病例敏感,它們遵循層次命名規則。
命名層次結構
如果loggerconfig的名稱後面是dot(
.)是後裔logger名稱的前綴,則據說是另一個LoggerConfig的祖先。如果自身與後代LoggerConfig之間沒有祖先,則據說LoggerConfig是子女loggerconfig的父母。
例如,名為"com.foo"的LoggerConfig是名為"com.foo.Bar"的LoggerConfig的父母。同樣, "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,但是您可以通過更改靜態屬性LogManager.context的值來更改LoggerContext實現。
如果您想在宏觀上下文中使用日誌記錄,則可以使用已準備好的MacroLoggerContext ,該Macroggercontext已預先配置的消息工廠和專門設計用於打印表達式的消息。
LoggerContext具有活動Configuration 。該配置包含所有logtargets,上下文範圍的過濾器和LoggerConfigs。
如前所述,可以通過調用LogManager.getLogger創建Logger。記錄器本身沒有執行直接的操作。它只有一個名稱並與LoggerConfig相關聯。它擴展了AbstractLogger並實現了所需的方法。隨著配置的修改登錄器可能與不同的loggerConfig相關聯,從而使其行為被修改。
帶有同名的LogManage.getLogger方法將始終返回對完全相同的Logger對象的引用。這意味著:
var x = LogManager . getLogger ( " something " );
var y = LogManager . getLogger ( " something " ); x和y參考完全相同的Logger對象。 ( x == y永遠是true )
Hexlog環境的配置始終在應用程序初始化時完成。
Hexlog使用軟件組件命名登錄器變得容易。這可以通過在每個類中實例化記錄儀來實現,其記錄器名稱等於類的完全合格的名稱。這是定義登錄器的有用且直接的方法。當日誌輸出帶有生成記錄器的名稱時,此命名策略使得可以輕鬆識別日誌消息的來源。但是,這只是命名登錄器的一種可能策略,而Hexlog並不限制可能的登錄器集。開發人員始終可以根據需要免費命名記錄器。
為方便起見,Hexlog提供了一組功能,您可以自動導入getLogger調用。使用import.hx文件時特別方便。 (見示例)
其他便利方法是getLoggerByClass和getLoggerByInstance ,它們在無法使用Hexlog便利類的宏觀上下文中很有用。
在日誌記錄配置中聲明記錄器時,創建LoggerConfig對象。 LoggerConfig包含一組過濾器,必須允許logevent通過,然後將其傳遞給任何logtargets。它還包含對應用於處理事件的一組logtargets的引用。
除了自動Loglevel Filtering Hexlog外,Hexlog還提供了可以應用的過濾器:
有關過濾器和過濾的更多信息
基於其記錄器選擇性啟用或禁用記錄請求的能力只是圖片的一部分。 Hexlog允許將記錄請求打印到多個目的地。在Hexlog說話中,輸出目的地稱為logtarget。
有關日誌目標的更多信息
通常,用戶不僅希望自定義輸出目標,還要自定義輸出格式。這是通過將佈局與logtarget關聯來實現的。佈局負責將凸面的格式化為用戶的願望,而日誌目標則負責將格式的輸出發送到其目的地。
有關佈局的更多信息
在系統中,每個日誌語句都由消息對象表示。
有關消息的更多信息
// 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課程如果您打算進行廣泛的記錄,這是一個很好的做法
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