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