1

我们正在尝试用 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 个文件时,这个脚本是否应该写入一个新文件?我们怎样才能做到这一点?谢谢。

4

2 回答 2

2

我测试了这段代码,认为size是以字节为单位的,所以如果你想写 5MB 的日志,你需要将大小设置为5*1024*1024或类似的东西。我的测试代码,写入 6 个文件,每个文件 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
}
于 2013-08-21T08:29:45.807 回答
2

我建议你使用类似Log::Rollingor的东西Logfile::Rotate

这两个模块都是针对您的问题的现成解决方案,希望所有错误都已经解决。

于 2013-08-21T09:56:05.977 回答