我正在阅读Log4perl并希望尝试将其用于在Linux机器上运行的Perl脚本的简单日志管理。我还阅读了newsyslog
和logrotate
,但是如果可能的话,我想使用Log4perl。
我正在尝试配置/etc/log4perl.conf
文件,以便:
widget
记录器(INFO
级别),将所有输出写入/opt/myapp/logs/myapp-<datetime>.log
,其中<datetime>
是日期/时间格式的字符串,如2012-12-20
myapp-<datetime>.log
文件需要每天轮换(最好在午夜),旧文件将被删除,并使用<datetime> + 1
创建新文件。例如,myapp-2012-12-20.log
将替换为myapp-2012-12-21.log
等。这是我认为最接近的最佳尝试,但仍缺少一些配置:
#####/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
###################################################################################
如何将log4perl.appender.MyAppLogAppender
配置为每天轮换一次,删除旧文件,然后创建一个具有正确时间戳的新文件?提前致谢。
答案 0 :(得分:12)
这是一个Log :: Log4perl配置文件的示例,定义了午夜的每日翻转(日期模式yyyy-MM-dd),保持最多5个已保存的日志文件,处于WARN级别,并将所有内容转储到屏幕:
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
答案 1 :(得分:0)
Log::Dispatch::FileRotate
中有一个陷阱,如果您的日常工作在一天的晚些时候(例如23:00)运行并且花费2h(所以大约在01:00结束),则日志轮换永远不会发生像这样的“白天”模式:
log4perl.appender.Logfile.DatePattern = yyyy-MM-dd
一个简单的解决方法是使用这样的“每小时”模式:
log4perl.appender.Logfile.DatePattern = yyyy-MM-dd-HH
因此,当下一次运行在23:00开始时,日志文件将在一个多小时后旋转。