gpt4 book ai didi

Log4perl类别作为日志文件名

转载 作者:行者123 更新时间:2023-12-03 06:29:13 25 4
gpt4 key购买 nike

我确信我很模糊并且错过了明显的东西,但是有没有一种简单的方法可以使用当前类别作为配置文件中的文件名而不诉诸子例程调用?

因此,在下面的内容中可以使用 ${category}.log 而不是在文件名行中重复 bin.nh.tpp

log4perl.logger.**bin.nh.tpp**=INFO, BIN_NH_TPP_LOGFILE

log4perl.appender.BIN_NH_TPP_LOGFILE=Log::Log4perl::Appender::File
log4perl.appender.BIN_NH_TPP_LOGFILE.filename=${LOGS}/nh/**bin.nh.tpp**.log
log4perl.appender.BIN_NH_TPP_LOGFILE.mode=append
log4perl.appender.BIN_NH_TPP_LOGFILE.layout=PatternLayout
log4perl.appender.BIN_NH_TPP_LOGFILE.layout.ConversionPattern=[%d] %F{1} %L %c - %m%n

最佳答案

恐怕它比子例程更复杂。 l4p conf 文件中的子例程允许包含在 conf 文件解析时已知的变量,例如时间/日期或用户 ID。您无法以这种方式修改日志时间行为。

我现在能想到的完成你想要的事情的最简单方法是像这样的自定义附加程序

package FileByCategoryAppender;

use warnings;
use strict;
use base qw( Log::Log4perl::Appender::File );

sub new {
my( $class, %options ) = @_;

$options{filename } = "no-category.log";
my $self = $class->SUPER::new( %options );
bless $self, $class;
}

sub log {
my( $self, %params ) = @_;

my $category = $params{ log4p_category };
$self->SUPER::file_switch( $category . ".log" );
$self->SUPER::log( %params );
}

1;

然后在您的脚本中使用它,例如

use strict;
use warnings;

use Log::Log4perl qw( get_logger );

my $conf = q(
log4perl.category = WARN, Logfile
log4perl.appender.Logfile = FileByCategoryAppender
log4perl.appender.Logfile.create_at_logtime = 1
log4perl.appender.Logfile.layout = \
Log::Log4perl::Layout::PatternLayout
log4perl.appender.Logfile.layout.ConversionPattern = %d %F{1} %L> %m %n
);

Log::Log4perl::init(\$conf);

my $logger = get_logger("Bar::Twix");
$logger->error("twix error");

$logger = get_logger("Bar::Mars");
$logger->error("mars error");

这将导致在记录时创建两个日志文件:

# Bar.Mars.log
2012/11/18 11:12:12 t 21> mars error

# Bar.Twix.log
2012/11/18 11:12:12 t 21> twix error

关于Log4perl类别作为日志文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13439885/

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