gpt4 book ai didi

perl - 使用 log4perl 限制日志大小

转载 作者:行者123 更新时间:2023-12-04 04:23:53 24 4
gpt4 key购买 nike

我想限制使用 log4perl 创建的日志文件的大小。我不希望我的日志文件增长到超过 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' );
}

最佳答案

我只是读了一点并做了一个实验。似乎如果您在使用 Log::Dispatch::FileRotate 时不使用 max 属性,保留 size 属性,并使用 truncate 属性而不是附加属性你可以得到你想要的:

#!/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

这给我留下了一个 130 字节的 mylog.log,其中有 4 行:

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

更新

看起来 FileRotate 总是至少生成一个 .1 文件,即使 max 设置为 0。

如果这对你来说绝对行不通,你需要 write your own apender .

关于perl - 使用 log4perl 限制日志大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11648566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com