WinXP 上的 ActiveState Perl 5.12
我最近成为了 Log4perl 的转换者,并成功地使用了它,我为构成我的应用程序的每个模块定义了一个特定的记录器。例子:
上传.pm-----
my $logger = get_logger("Upload"); # specific logger
my $layout = Log::Log4perl::Layout::PatternLayout->new( "%d %p> %F{1}:%L %M - %m%n");
my $appender = Log::Log4perl::Appender->new( "Log::Dispatch::File",
filename => "Upload.log",
mode => "append"
);
$appender->layout($layout);
$logger->level($OFF); # or $INFO
$logger->add_appender($appender)
....
这可行,但很难跨大量日志文件跟踪程序流,例如 Upload.log 、 Parse.log 、 FileRead.log 等。快速-n-dirty 解决方案:在所有记录器中使用相同的文件名。这效果要好得多,但前提是程序是按顺序连续使用的。
现在对于皱纹 - 假设模块 Upload.pm 被几个程序使用,即 readMyFiles.pl、readHerFiles.pl 和 dumpAllFiles.pl。运行 readMyFiles.pl 时,我希望 Upload.pm 中的记录器写入 readMyFiles.pl.log,运行时 dumpAllFiles.pl 希望 Upload.pm 中的记录器写入 dumpAllFiles.pl.log
一种方法可能是在我的 .pl 文件中声明我们的 变量 $logFileName 并在我的所有模块中使用它,如下所示:
filename => $logFileName,
另一个可能是从我的 .pm 中删除所有记录器并仅在 .pl 中定义它们 - 但是我将如何在 .pm 中引用 $logger ?
感谢所有想法和建议。
仍在学习的史蒂夫