1

我需要将重要事件消息收集到单独的日志文件中。(常规日志相当臃肿,用于维护,而用户只对很少的事件感兴趣。)

这些事件与级别无关,尽管所有 ERROR 级别和向上事件都被认为是“重要的”。许多此类事件属于 INFO 或 WARN 级别。因此,水平阈值或匹配似乎不是答案。

此外,事件不限于层次结构的给定分支。这些可以来自整个应用程序,所以“类别”似乎也不适合,或者是吗?

编辑: 目前,我有一个 INFO 级别的常规、维护记录器和一个 WARN 级别的屏幕记录器

有没有办法用 Log::Log4perl 实现这样的记录器?

问候

梅尔

4

2 回答 2

3

您可以通过在 Log4perl 中添加一个额外的类别来实现这一点。

类别在 Log4perl 中也称为“记录器”,两者指的是同一事物,这些术语可以互换使用

你可以像这样获取一个额外的记录器:

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 实例的名称,它在下面两行中配置。第一行基本上意味着:

将日志级别为 TRACE 或更高级别的所有内容发送到名为ImportantApp的 Appender 。

Important是记录器的名称,或Category,我们在上面用get_logger("Important").

于 2016-04-29T11:33:50.677 回答
2

您可以使用过滤器

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
于 2016-04-30T06:54:56.150 回答