log4perl:logcluck一直显示

时间:2011-04-19 12:56:04

标签: perl error-handling

我正在尝试使用log4perl并遇到了一个奇怪的问题:

我将log4perl配置为记录DEBUG级别以上的所有内容,我想将所有内容输出到文件中,但是,我只想在屏幕上显示错误或致命错误。所以这是我的配置文件:

#############################################################################################################################
## Logger                                                                                                                  ##
#############################################################################################################################
log4perl.logger                                     = DEBUG, fileLog, screenLog

#############################################################################################################################
## File Log (all levels)                                                                                                   ##
#############################################################################################################################
log4perl.appender.fileLog                       = Log::Log4perl::Appender::File
log4perl.appender.fileLog.filename              = error_log
log4perl.appender.fileLog.mode                  = append
log4perl.appender.fileLog.layout                = Log::Log4perl::Layout::PatternLayout
log4perl.appender.fileLog.layout.ConversionPattern = %d [%p] [%F line %L] %m%n

#############################################################################################################################   
## Screen Log (only error level or higher)                                                                                 ##
#############################################################################################################################
log4perl.appender.screenLog                       = Log::Log4perl::Appender::Screen
log4perl.appender.screenLog.Threshold               = ERROR                                     
log4perl.appender.screenLog.layout                   = Log::Log4perl::Layout::PatternLayout
log4perl.appender.screenLog.layout.ConversionPattern = %d [%p] [%F line %L] %m%n

请注意屏幕输出的阈值设置为错误!这适用于常规$ logger->错误和$ logger-> warn命令,错误输出到文件和屏幕,仅警告文件。

然而,当我尝试$ logger-> logcluck(“cluck”)时,即使cluck处于WARN级别,它仍会输出到屏幕上!

奇怪的是,如果我将文件阈值设置为ERROR,它不会显示在我的文件中。如果我将整体级别设置为ERROR,它也不会显示在屏幕上..

有关为何发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:2)

这是因为logcluck同时记录(作为警告)和咯咯(Carp :: cluck)。后者将它打印到控制台。

如果你希望cluck只出现在日志中,我不确定是否有一个答案,因为你自己调用Carp :: longmess,并记录下来。