1

Log4perlロガーを作成していて、localtime()関数を使用しています。問題は、log4perlロガーを(別のファイルに対して)再インスタンス化するモジュールを呼び出すたびに、localtime()が異なり、すべてを1つのファイルにまとめたいときに複数の異なるログファイルを作成することです。
考え?

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れ、2番目のファイルも呼び出されます[追加できますが、すべてのコードをあなたたちに投げたくありませんでした]。 これにより、2つの別々のタイムスタンプが作成されます。

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);
4

1 に答える 1

1

まず、log4perl構成を保存するためにファイルを使用する必要はありません。文字列を使用して、ロガーを初期化できます。

次に、filerotateアペンダーを使用して、毎日新しいログファイルを作成し、最後の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);
于 2013-02-19T08:59:53.187 に答える