我正在尝试在登录到文件之前替换日志消息中的模式。记录器使用Perl模块Log::Log4perl
。我看到这个模块中只有一个Filter选项,但这并没有解决我的问题。
实际上,这就是我想要做的。我们说我的日志消息是"Testing the logger module"
和"Developing the logger module"
。我想在消息中将字符串'module'
替换为'package'
。因此,只要日志消息中有字符串'module',就应该在记录之前将其替换为'package'。我想在这里使用Perl的正则表达式替换/替换,这将允许我替换不同的模式。
这可能吗?有人可以帮忙吗?
提前致谢,
答案 0 :(得分:0)
您可以在配置文件中指定custom cspec来执行此操作。
# basic config to write the log to a file
log4perl.logger.mylog = DEBUG, MyLog
log4perl.appender.MyLog = Log::Log4perl::Appender::File
log4perl.appender.MyLog.filename = my.log
# create a custom cspec called 'A' with an anonymous sub.
# The sub would be called with the following args: $layout, $message, $category, $priority, $caller_level
# Then apply the regex as you like.
log4j.PatternLayout.cspec.A = sub { $_[1] =~ s/module/package/; $_[1] }
# then use the cspec here with '%A'
log4perl.appender.MyLog.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.MyLog.layout.ConversionPattern = %A%n
您的代码不需要更改:
use Log::Log4perl;
log::Log4perl::init('log.conf');
my $logger = Log::Log4perl->get_logger('mylog');
$logger->info("Testing the logger module"); # prints 'Testing the logger package'