gpt4 book ai didi

perl - Log4Perl:如何更改运行代码中使用的记录器文件? (叉后)

转载 作者:行者123 更新时间:2023-12-04 18:15:35 25 4
gpt4 key购买 nike

我在 perl 中设置了一个 ETL 进程来处理许多文件,并将它们加载到数据库中。

最近,出于性能原因,我通过使用 fork() 调用和对 system("perl someOtherPerlProcess.pl $arg1 $arg2") 的调用将代码设置为多线程。

我最终得到了大约 12 个使用不同参数运行的 someOtherPerlProcess.pl 实例,这些进程每个都通过一个包含文件的目录(对应于我们数据库中的一个表)工作。

应用程序的主要功能可以工作,但我在弄清楚如何配置我的日志记录时遇到了问题。

理想情况下,我希望所有 someOtherPerlProcess.pl 共享相同的 $log_config 值来初始化他们的记录器,但让每个人在他们正在处理的目录中创建一个日志文件。

我一直无法弄清楚如何做到这一点。我还注意到,在我调用这些 perl 脚本的目录中,我看到了几个包含我所有日志记录消息的文件(ARRAY(0x260eec)、ARRAY(0x313f8) 等)!

有没有一种简单的方法可以从运行代码中更改 log4perl.appender.A1.filename 值?
或者以其他方式动态配置我们使用的文件名,但使用配置文件中的所有其他值?

最佳答案

我为此想出了一个不太理想的解决方案,即直接从 someOtherPerlProcess.pl 配置我的记录器。

my $FORKED_LOG_CONF = "log4perl.appender.A1.filename=$directory_to_load/log.txt
log4perl.rootLogger=WARN, A1
log4perl.appender.A1=Log::Log4perl::Appender::File
log4perl.appender.A1.mode=append
log4perl.appender.A1.autoflush=1
log4perl.appender.A1.layout=PatternLayout
log4perl.appender.A1.layout.ConversionPattern=[%p] %d{yyyy-MM-dd HH:mm:ss}: %m%n";

#Logger start up
Log::Log4perl::init( \$FORKED_LOG_CONF);
my $logger = get_logger();

$directory_to_load 是记录器的进程特定部分,它在运行的 perl 进程的上下文中工作,并且该变量具有(本地)值,但如果在外部配置文件中使用该方法将失败。

我很高兴听到任何替代解决方案。

关于perl - Log4Perl:如何更改运行代码中使用的记录器文件? (叉后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11800670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com