将重要事件消息定向到单独的Log :: Log4perl记录器

时间:2016-04-29 07:50:43

标签: perl log4perl

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

事件与级别无关,尽管所有ERROR级别和up事件都被认为是"重要的"。许多此类事件属于INFO或WARN级别。因此,等级阈值或匹配似乎不是答案。

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

修改 目前,我有一个INFO级别的通用,维护记录器和一个WARN级别的屏幕记录器

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

此致

梅尔

2 个答案:

答案 0 :(得分:3)

您可以通过在Log4perl中添加an additional category来实现此目的。

  

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

  

使用loglevel TRACE或更高版本将所有内容发送到名为 ImportantApp 的Appender。

Important是我们使用get_logger("Important")抓取的记录器名称或类别

答案 1 :(得分:2)

您可以使用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
相关问题