1

Log4Perl を使用してすべてのメッセージ/レベルを直接 OutputDebugString (Windows システム) に記録することは可能ですか?

既に log4perl を使用しているモジュールがいくつかありますが、すべてのログ メッセージが OutputDebugStrings である環境でこれらのモジュールを使用したいと考えています。この環境では、メッセージは DbgView で読み取られ、モジュールの出力も DbgView で読み取りたいと考えています。Log4Perl ログ ファイルを DbgView 出力とマージしたくありません。

次の perl コードを使用して、Perl から直接 OutputDebugStrings を記述します。

use Win32::API::OutputDebugString qw(OutputDebugString DStr);
OutputDebugString("Foo bar", "baz\n"); # sends  Foo barbaz\n to the debugger

log4net.Appender.OutputDebugStringAppender を見つけました - Perl で同じことを達成するにはどうすればよいですか

前もって感謝します。

4

1 に答える 1

3

==== 解決策が見つかりました ==== daxim のおかげで、私は自分のアペンダーを書きました。ソースはこちら

-次のコードで perl パッケージを生成します

package Log4PerlOutputDebugStringAppender;

sub new {
   my($class, %options) = @_;
   my $self = { %options };
   bless $self, $class;
   return $self;
}

sub log {
   my($self, %params) = @_;
   use Win32::API::OutputDebugString qw(OutputDebugString DStr);
   OutputDebugString( "$params{message}" );
}

1;

-次のLog4Perl構成ファイルを生成します

log4perl.logger = INFO, OutputDebugString
log4perl.appender.OutputDebugString=Log4PerlOutputDebugStringAppender
log4perl.appender.OutputDebugString.layout=Log::Log4perl::Layout::PatternLayout
log4perl.appender.OutputDebugString.layout.ConversionPattern=[%-5p] %-15.15c{1} (%4L) - %m%n

-Perl スクリプトでロガーを初期化します

use Log::Log4perl qw(:easy);
Log::Log4perl->init("logconf.txt");
INFO("INFO");
WARN("WARN");
FATAL("FATAL");

Et voilà - すべてのロギング メッセージは OutputDebugStrings を通過します

助けてくれてありがとうダキシム。

于 2013-07-25T12:32:45.347 に答える