2013-02-18 67 views
1

我在寫一個Log4perl記錄器,並使用localtime()函數。問題是,每次我調用重新實例化log4perl記錄器的模塊(針對不同的文件)時,localtime()將會不同,當我想將它們全部放在一個文件中時,會創建多個不同的日誌文件。
想法?Perl日誌文件命名爲時間戳問題

use strict; 
use warnings; 
use Config::IniFiles; 
use File::Copy; 
use Cwd 'abs_path'; 
use Path::Class; 

以上是我的代碼做use LIB::Paths之前是使用Paths.pm的第一個文件。下面的代碼是Paths.pm文件。第一個文件調用use LIB::Paths,第二個文件[可以添加,但我不想只把所有的代碼扔給你們]。 這使兩個單獨的時間戳。

my @now = localtime(); 
### May want to add something from the input name to the log file 
our $timeStamp = sprintf("%04d_%02d%02d_%02d%02d%02d", 
        $now[5]+1900, $now[4]+1, $now[3], 
        $now[2],  $now[1], $now[0]); 

my $logFile = "$timeStamp.log"; 
our $fullLogPath = $output_dir . "/" . $log_dir . "/" . $logFile; 
qx(touch $fullLogPath); 

# write path and level to log configuration file 
our $logLevel = $parms->val('MAIN','LogLevel'); 

open FILEHANDLE, '>', "$base_dir/CONFIG/log.conf"; 

print FILEHANDLE "log4perl.rootLogger=$logLevel, LOGFILE\n"; 
print FILEHANDLE "log4perl.appender.LOGFILE=Log::Log4perl::Appender::File\n"; 
print FILEHANDLE "log4perl.appender.LOGFILE.filename=$fullLogPath\n"; 
print FILEHANDLE "log4perl.appender.LOGFILE.mode=append\n"; 
print FILEHANDLE "log4perl.appender.LOGFILE.layout=PatternLayout\n"; 
print FILEHANDLE "log4perl.appender.LOGFILE.layout.ConversionPattern=%F{1} %8L %10p %n  %m%n"; 

close (FILEHANDLE); 
open SECONDFILE, '>', "$base_dir/CONFIG/log2.conf"; 

print SECONDFILE "log4perl.rootLogger=$logLevel, LOGFILE\n"; 
print SECONDFILE "log4perl.appender.LOGFILE=Log::Log4perl::Appender::File\n"; 
print SECONDFILE "log4perl.appender.LOGFILE.filename=$fullLogPath\n"; 
print SECONDFILE "log4perl.appender.LOGFILE.mode=append\n"; 
print SECONDFILE "log4perl.appender.LOGFILE.layout=PatternLayout\n"; 
print SECONDFILE "log4perl.appender.LOGFILE.layout.ConversionPattern=%F{1} %n  %m%n"; 

close (SECONDFILE); 
+2

能否請您添加你的代碼! – smartmeta 2013-02-18 15:43:18

+1

如何檢查目錄中是否存在日誌文件並重新使用它? – Birei 2013-02-18 21:50:54

回答

1

首先,你不必使用文件來存儲log4perl配置,你可以使用字符串初始化記錄器。其次,你可以使用filerotate appender每天創建一個新的日誌文件,保留最後的n個文件。

在你的例子中,每個調用都會創建一個新文件。如果你只使用一天的特定的「拍打它會創建一個新的文件每天:

our $timeStamp = sprintf("%04d_%02d%02d", $now[5]+1900, $now[4]+1, $now[3]); 
       ); 

問候,

filerotate:

my $fullLogPath = $output_dir . "/" . $log_dir . "/" . "testlogger.log"; 
# Logger config 
my $log_conf = q(
    log4perl.category = INFO, FileAppndr 
    log4perl.appender.FileAppndr    = Log::Dispatch::FileRotate 
    log4perl.appender.FileAppndr.filename = $fullLogPath 
    log4perl.appender.FileAppndr.mode  = append 
    log4perl.appender.FileAppndr.DatePattern = yyyy-MM-dd 
    log4perl.appender.FileAppndr.max   = 10 
    log4perl.appender.FileAppndr.TZ   = GMT 
    log4perl.appender.FileAppndr.layout  = PatternLayout 
    log4perl.appender.FileApp.layout.ConversionPattern = %F{1} %n  %m%n 
); 
# Initialize Logger 
Log::Log4perl::init_once(\$log_conf); 
相關問題