我想限制使用log4perl创建的日志文件的大小。我不希望我的日志文件超过100mb;我只需要最后100mb (或大约100MB)的数据。理想情况下,它会截断较早的数据,只保留最后一位。我知道Log::Dispatch::FileRotate模块,但它不能完全满足我的需求,因为我不想要多个日志文件。
这个是可能的吗?
完整代码,包括内联配置,如下所示(减去use语句):
my $log_conf = q/
log4perl.category = DEBUG, Logfile
log4perl.appender.Logfile = Log::Dispatch::FileRotate
log4perl.appender.Logfile.filename = sub { return get_log_fn(); }
log4perl.appender.Logfile.mode = truncate
log4perl.appender.Logfile.autoflush = 1
log4perl.appender.Logfile.size = 104857600
log4perl.appender.Logfile.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.Logfile.layout.ConversionPattern = %d %P %M(%L) %p %m %n
/;
Log::Log4perl::init( \$log_conf );
my $logger = Log::Log4perl::get_logger();
INFO "Starting $0";
my $upper = 100000000;
for(my $i=0;$i < $upper;$i++) {
DEBUG $i;
}
sub get_log_fn
{
use File::Basename;
return sprintf "%s.log", basename( $0, '.pl' );
}发布于 2012-07-25 21:27:27
我只是读了一点书,做了一个实验。似乎如果去掉max属性,保留size属性,并在使用Log::Dispatch::FileRotate时使用truncate属性而不是append属性,您就可以得到想要的东西:
#!/usr/bin/env perl
use Modern::Perl;
use Log::Log4perl;
Log::Log4perl::init('./log4perl.conf');
my $logger = Log::Log4perl->get_logger('LOG1');
for my $num ( 1..1000 ) {
$logger->debug($num);
}
$logger->debug('blah');使用关联的配置文件:
###############################################################################
# Log::Log4perl Conf #
###############################################################################
log4perl.rootLogger = DEBUG, LOG1
log4perl.appender.LOG1 = Log::Dispatch::FileRotate
log4perl.appender.LOG1.filename = ./mylog.log
log4perl.appender.LOG1.mode = truncate
log4perl.appender.LOG1.autoflush = 1
log4perl.appender.LOG1.size = 1024
#log4perl.appender.LOG1.max = 5
log4perl.appender.LOG1.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.LOG1.layout.ConversionPattern = %d %p %m %n这样我就得到了一个包含4行代码的130字节的mylog.log:
2012/07/25 08:23:14 DEBUG 998
2012/07/25 08:23:14 DEBUG 999
2012/07/25 08:23:14 DEBUG 1000
2012/07/25 08:23:14 DEBUG blah更新
即使当最大值设置为0时,FileRotate似乎始终至少会生成一个.1文件。
如果这对你来说绝对不起作用,你需要使用write your own apender。
发布于 2014-05-16 05:22:08
我遇到了同样的问题,并找到了这个模块:
http://search.cpan.org/dist/Log-Log4perl-Appender-File-FixedSize/lib/Log/Log4perl/Appender/File/FixedSize.pm
也许晚了两年,但我想其他登陆这里的人可能会从中受益
https://stackoverflow.com/questions/11648566
复制相似问题