我需要将重要事件消息收集到单独的日志文件中。 (常规日志相当臃肿,用于维护,而用户只对极少数事件感兴趣。)
事件与级别无关,尽管所有ERROR级别和up事件都被认为是"重要的"。许多此类事件属于INFO或WARN级别。因此,等级阈值或匹配似乎不是答案。
此外,事件不限于层次结构的给定分支。这些可以来自整个应用程序,因此"类别"似乎不适合,或者他们适合吗?
修改 目前,我有一个INFO级别的通用,维护记录器和一个WARN级别的屏幕记录器
有没有办法用Log :: Log4perl实现这样的记录器?
此致
梅尔
答案 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