如何通过Log4Perl记录OutputDebugString

时间:2013-07-23 15:05:04

标签: perl log4perl outputdebugstring

可以将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实现相同的目标

提前致谢。

1 个答案:

答案 0 :(得分:3)

====找到解决方案==== 感谢daxim我写了自己的appender。这是来源

- 使用以下代码生成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");

Etvoilà - 所有日志消息都通过OutputDebugStrings

感谢daxim寻求帮助。