2012-07-09 57 views
0

我知道如何配置log4j,這樣日誌文件會自動旋轉,日期附加到日誌文件中。如何爲log4perl配置DateFileAppender

log4j.appender.schedulerService.Directory = ${logdir} 
log4j.appender.schedulerService.Prefix = web.log_ 
log4j.appender.schedulerService.Suffix = 

我該如何做到與log4perl相同?

我試過同樣的配置log4Perl,但它看起來像filename參數是強制性的。任何幫助表示讚賞。

Mandatory parameter 'filename' missing in call to Log::Dispatch::File::_make_handle 

回答

1

查看Log::Dispatch::File::Stamped - 它會直接寫入日期戳記的日誌文件,避免實際旋轉它(它只會在檢測到日期發生變化時啓動新的日誌文件)。

log4perl.appender.Logfile=Log::Dispatch::File::Stamped 
log4perl.appender.Logfile.min_level=info 
log4perl.appender.Logfile.filename=foo.log 
log4perl.appender.Logfile.stamp_fmt=%Y%m%d 
0

這是一個常見問題:How can I roll over my logfiles automatically at midnight?


子類Log::Dispatch::FileRotate添加自定義的文件擴展名:

package Log::Dispatch::FileRotate::FileExtension; 
use parent 'Log::Dispatch::FileRotate'; 
use strictures; 
use SUPER qw(); 
use Time::Piece qw(); 

sub new { 
    my ($self, %p) = @_; 
    $self = $self->SUPER(%p); 
    $self->{extension} = $p{extension}; 
    return $self; 
} 

sub log_message { 
    ### lines 177..235 from parent class go here 
     warn localtime() . " $$ Rotating\n" if $self->{debug}; 
     my $stamp = Time::Piece->localtime->strftime($self->{extension}); 
     warn "$$ rename $name $stamp\n" if $self->{debug}; 
     rename $name, sprintf('%s.%s', $name, $stamp); 
     warn localtime() . " $$ Rotating Done\n" if $self->{debug}; 
    ### lines 257..266 from parent class go here 
} 

1; 

用法:

use Log::Dispatch::FileRotate::FileExtension qw(); 
my $file = Log::Dispatch::FileRotate::FileExtension->new(
    name => 'file1', 
    min_level => 'info', 
    filename => 'Somefile.log', 
    DatePattern => 'yyyy-MM-dd', 
    extension => '%F', 
); 
+0

我已經看到了這種結構,旋轉日誌文件等創建的文件web.log_,web.log_.1,web_log_.2,而我需要的文件名包含日期以及(網絡.log_2012-07-15,web.log_2012-07-16 etc ...) – Sriharsha 2012-07-24 07:02:33

+0

'DatePattern'也在常見問題中解釋。請仔細閱讀。 – daxim 2012-07-24 07:16:07

+0

DatePattern定義*何時旋轉*,並且不影響 的文件擴展名... [此處](http://osdir.com/ml/lang.perl.modules.log4perl.devel/2007-02/msg00004 .html) – Sriharsha 2012-07-26 06:59:53