如何让Log4perl每天旋转我的日志?

我正在阅读Log4perl,并试图将其用于在Linux机器上运行的Perl脚本的简单日志pipe理。 我也读过newsysloglogrotate但是想尽可能使用Log4perl。

我正在尝试configuration/etc/log4perl.conf文件,以便:

  • 定义一个widgetlogging器( INFO级别),将所有输出写入/opt/myapp/logs/myapp-<datetime>.log ,其中<datetime>是date/时间格式化的string,如2012-12-20
  • 这个myapp-<datetime>.log文件需要每天轮换(最好在午夜),旧文件被删除,并用<datetime> + 1创build一个新文件。 例如, myapp-2012-12-20.log将被replace为myapp-2012-12-21.log

这是我认为最接近的最好的尝试,但仍然缺less一些configuration:

 #####/etc/log4perl.conf############################################################ log4perl.logger.widget = INFO, MyAppLogAppender log4perl.appender.MyAppLogAppender = Log::Log4perl::Appender::File log4perl.appender.MyAppLogAppender.filename = /opt/myapp/logs/myapp-???.log log4perl.appender.MyAppLogAppender.layout = Log::Log4perl::Layout::SimpleLayout ################################################################################### 

如何configurationlog4perl.appender.MyAppLogAppender每天轮换一次,删除旧文件,并用正确的时间戳创build一个新文件? 提前致谢。

这里有一个Log :: Log4perl配置文件的例子,在午夜(日期模式为yyyy-MM-dd)定义每日滚动,在WARN级别保留最多5个保存的日志文件,并将所有内容倾倒到屏幕上:

 log4perl.logger = TRACE, Screen, Logfile log4perl.appender.Logfile = Log::Dispatch::FileRotate log4perl.appender.Logfile.Threshold = WARN log4perl.appender.Logfile.filename   = test.log log4perl.appender.Logfile.max        = 5 log4perl.appender.Logfile.DatePattern = yyyy-MM-dd log4perl.appender.Logfile.TZ         = PST log4perl.appender.Logfile.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.Logfile.layout.ConversionPattern = %d %m %n log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.layout = Log::Log4perl::Layout::PatternLayout::Multiline log4perl.appender.Screen.layout.ConversionPattern = [%p] %m %n 

(参考: https : //metacpan.org/module/Log :: Log4perl :: FAQ#How-can-I-roll-over-my-logfiles-automatically-at-midnight- )