0

ファイルにログオンする前に、ログメッセージのパターンを置き換えようとしています。ロガーはPerlモジュールを使用しLog::Log4perlます。このモジュールで使用できるフィルターオプションのみがあり、問題は解決していません。

実はこれがやりたいことです。"Testing the logger module"私のログメッセージはとだとしましょう"Developing the logger module"。メッセージ内の文字列'module'をに置き換えたい。'package'したがって、ログメッセージに文字列「module」がある場合は常に、ログに記録する前に「package」に置き換える必要があります。そして、ここでPerlの正規表現の検索/置換を使用したいと思います。これにより、さまざまなパターンを置換できます。

これは可能ですか?誰か助けてもらえますか?

前もって感謝します、

4

1 に答える 1

0

これを行うには、confファイルでカスタム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'
于 2012-06-22T06:01:32.473 に答える