2013-08-21 28 views
1

我们正在尝试在Perl中编写一个脚本来制作循环日志。一个程序会生成一个非常大的日志文件,我们希望将它分成5,6个左右的文件。如何在Perl中编写循环日志脚本?

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

+1

您是否考虑过查看Log :: Dispatch :: FileRotate的文档?它在CPAN上。 – simbabque

+0

是的,这是我们尝试的第一件事。这个例子来自他们的文档。 – Mefhisto1

回答

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 
} 
+0

嗨,谢谢你的回答,这非常有帮助。你认为有一种方法可以指定在哪里复制日志文件,比如dir'some path'? – Mefhisto1

+1

我在这个模块里看不到这样的选项。它始终将原始日志中的旋转日志复制到相同的目录中。你可以使用其他日志记录模块,如果你真的需要这个,例如Logfile :: Rotate,正如Borodin在他的回答中所说的 – Suic

+0

嗨,你是否可以使用类似 move($ file,“temp \ Logs \”) ; 我们修改了一下你的代码,我们得到了我们正在寻找的东西。然而,由于我们仍在测试,我们不知道目标日志文件将放置在哪里,这就是为什么我们试图从这里修复它并自动将日志放入单独的目录。谢谢。 – Mefhisto1