我正在尝试使用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-> error和$ logger-> warn命令非常有用,错误会同时输出到文件和屏幕,警告仅输出到文件。

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

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

有什么想法为什么会这样?

最佳答案

这是因为logcluck会同时记录日志(作为警告)和咯咯声(Carp::cluck)。并且是后者将其打印到控制台。

如果您只想让敲门声出现在日志中,那么我不确定是否可以通过自己调用Carp::longmess并记录下来来解决问题。

关于perl - log4perl : logcluck keeps being displayed,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5716676/

10-09 04:24