Как Записать 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

Спасибо Даксим за помощь.

Другие вопросы по тегам