我们正在尝试在Perl中编写一个创建循环日志的脚本。一个程序生成一个非常大的日志文件,我们想将它分成5,6个左右的文件。
use Log::Dispatch::FileRotate;
my $file = Log::Dispatch::FileRotate->new( name => 'file1',
min_level => 'info',
filename => 'C:\Test\Log.txt',
dir => 'C:\Test',
mode => 'write' ,
size => 5,
max => 6,
);
$file->log( level => 'info', message => 'Comment');
我们在网上找到了这个代码,但它的行为有点不规律。每当主日志文件增长5MB并进入6个文件顶部时,此脚本是否应该写入新文件?我们怎样才能做到这一点? 感谢。
答案 0 :(得分:2)
我测试了这段代码,并认为size
是以字节为单位的,所以如果你想写5MB日志,你需要将大小设置为5*1024*1024
或类似的东西。我的测试代码,每个写5个文件5MB:
#!/usr/bin/perl
use strict;
use warnings;
use Log::Dispatch::FileRotate;
my $file = Log::Dispatch::FileRotate->new(
name => 'file1',
min_level => 'info',
filename => '/tmp/log/some.log',
mode => 'append',
size => 5*1024*1024,
max => 6,
newline => 1
);
while (1) {
$file->log( level => 'info', message => time );
$file->log( level => 'debug', message => time." debug ".time ); #this will not be logged, because of log level
}
答案 1 :(得分:2)
我建议您使用Log::Rolling
或Logfile::Rotate
之类的内容。
这两个模块都是针对您的问题的现成解决方案,并希望已经解决了所有错误。