将重大事件消息定向到单独的 Log::Log4perl 记录器
Directing significant-event messages to a separate Log::Log4perl logger
我需要将重大事件消息收集到单独的日志文件中。 (常规日志相当臃肿,用于维护,而用户只对极少数事件感兴趣。)
尽管所有 ERROR 级别及更高级别的事件都被视为 "significant",但事件与级别无关。许多此类事件的级别为 INFO 或 WARN。因此,级别阈值或匹配似乎不是答案。
此外,事件不限于层次结构的给定分支。这些可能来自整个应用程序,所以 "categories" 似乎也不适合,或者是吗?
编辑:
目前,我有一个 INFO 级别的一般维护记录器和一个 WARN 级别的屏幕记录器
有没有办法用Log::Log4perl实现这样的记录器?
此致
梅尔
您可以通过在 Log4perl 中添加 an additional category 来实现。
Categories are also called "Loggers" in Log4perl, both refer to the same thing and these terms are used interchangeably
您可以像这样获取额外的记录器:
my $important_logger = Log::Log4perl->get_logger("Important");
类别可以有自己的配置:
log4perl.logger.Important = TRACE, ImportantApp
log4perl.additivity.Important = 0
log4perl.appender.ImportantApp = Log::Log4perl::Appender::File
log4perl.appender.ImportantApp.filename = important.log
ImportantApp
是Appender实例使用的name,配置在最下面两行。第一行基本意思是:
Send everything with loglevel TRACE or higher to the Appender named ImportantApp.
Important
是记录器的名称,或者我们在上面用 get_logger("Important")
.
抓取的 类别
您可以使用 filters:
log4perl.logger = WARN, Log1, Log2
log4perl.filter.Filter1 = sub { ... }
log4perl.filter.Filter2 = sub { ... }
log4perl.appender.Log1 = Log::Log4perl::Appender::Screen
log4perl.appender.Log1.Filter = Filter1
log4perl.appender.Log2 = Log::Log4perl::Appender::File
log4perl.appender.Log2.Filter = Filter2
或者你可以编写自己的过滤器包继承自 Log::Log4perl::Filter
:
log4perl.logger = WARN, Log1, Log2
log4perl.filter.Filter1 = MyApp::Log::Filter1
log4perl.filter.Filter2 = MyApp::Log::Filter2
log4perl.appender.Log1 = Log::Log4perl::Appender::Screen
log4perl.appender.Log1.Filter = Filter1
log4perl.appender.Log2 = Log::Log4perl::Appender::File
log4perl.appender.Log2.Filter = Filter2
我需要将重大事件消息收集到单独的日志文件中。 (常规日志相当臃肿,用于维护,而用户只对极少数事件感兴趣。)
尽管所有 ERROR 级别及更高级别的事件都被视为 "significant",但事件与级别无关。许多此类事件的级别为 INFO 或 WARN。因此,级别阈值或匹配似乎不是答案。
此外,事件不限于层次结构的给定分支。这些可能来自整个应用程序,所以 "categories" 似乎也不适合,或者是吗?
编辑: 目前,我有一个 INFO 级别的一般维护记录器和一个 WARN 级别的屏幕记录器
有没有办法用Log::Log4perl实现这样的记录器?
此致
梅尔
您可以通过在 Log4perl 中添加 an additional category 来实现。
Categories are also called "Loggers" in Log4perl, both refer to the same thing and these terms are used interchangeably
您可以像这样获取额外的记录器:
my $important_logger = Log::Log4perl->get_logger("Important");
类别可以有自己的配置:
log4perl.logger.Important = TRACE, ImportantApp
log4perl.additivity.Important = 0
log4perl.appender.ImportantApp = Log::Log4perl::Appender::File
log4perl.appender.ImportantApp.filename = important.log
ImportantApp
是Appender实例使用的name,配置在最下面两行。第一行基本意思是:
Send everything with loglevel TRACE or higher to the Appender named ImportantApp.
Important
是记录器的名称,或者我们在上面用 get_logger("Important")
.
您可以使用 filters:
log4perl.logger = WARN, Log1, Log2
log4perl.filter.Filter1 = sub { ... }
log4perl.filter.Filter2 = sub { ... }
log4perl.appender.Log1 = Log::Log4perl::Appender::Screen
log4perl.appender.Log1.Filter = Filter1
log4perl.appender.Log2 = Log::Log4perl::Appender::File
log4perl.appender.Log2.Filter = Filter2
或者你可以编写自己的过滤器包继承自 Log::Log4perl::Filter
:
log4perl.logger = WARN, Log1, Log2
log4perl.filter.Filter1 = MyApp::Log::Filter1
log4perl.filter.Filter2 = MyApp::Log::Filter2
log4perl.appender.Log1 = Log::Log4perl::Appender::Screen
log4perl.appender.Log1.Filter = Filter1
log4perl.appender.Log2 = Log::Log4perl::Appender::File
log4perl.appender.Log2.Filter = Filter2