Как Записать OutputDebugString через Log4Perl
Можно ли регистрировать все сообщения / уровни с помощью Log4Perl непосредственно в OutputDebugString (система Windows)?
У меня есть некоторые модули, которые уже используют log4perl, но теперь я хочу использовать эти модули в среде, где все сообщения журнала являются OutputDebugStrings - в этой среде сообщения читаются с помощью DbgView, и я хочу читать выходные данные моих модулей также с помощью DbgView. Я не хочу объединять файлы Log4Perl Log с выходом DbgView.
Я пишу OutputDebugStrings непосредственно из Perl, используя следующий код Perl:
use Win32::API::OutputDebugString qw(OutputDebugString DStr);
OutputDebugString("Foo bar", "baz\n"); # sends Foo barbaz\n to the debugger
Я нашел log4net.Appender.OutputDebugStringAppender - Как я могу добиться того же для Perl
Заранее спасибо.
1 ответ
==== нашел решение ==== благодаря 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");
Et voilà - все сообщения журнала проходят через OutputDebugStrings
Спасибо Даксим за помощь.