войти 4net в журнал событий в powershell - PullRequest
0 голосов
/ 13 марта 2020

У меня чертовски много времени получается, что журнал 4net записывается в журнал событий Windows из скрипта Powershell. При запуске сценария в консоли PowerShell администратора с включенной внутренней отладкой я получаю:

log4net:ERROR [EventLogAppender] ErrorCode: GenericFailure. Unable to write to event log [Application] using source [Foo Source]

Я создал источник в начале сценария. Запись в журнал событий с помощью обычных командлетов Powershell выполняется успешно (например, https://devblogs.microsoft.com/scripting/how-to-use-powershell-to-write-to-event-logs/), но даже с созданным исходным кодом и сценарием, запущенным в административной консоли PowerShell, я получаю сообщение GenericFailure.

Код следующий:

[void][Reflection.Assembly]::LoadFrom((resolve-path "log4net.dll"))
[log4net.LogManager]::ResetConfiguration()

#Example of File Appender initialization
$FileApndr = new-object log4net.Appender.FileAppender((
    [log4net.Layout.ILayout](new-object log4net.Layout.PatternLayout('[%date{yyyy-MM-dd HH:mm:ss.fff}] [%level] [%message]%n')),
    (([System.IO.Directory]::GetParent($MyInvocation.MyCommand.Path)).FullName+'\LogOutputInConsoleAndFile.log'),
    $True));
$FileApndr.Threshold = [log4net.Core.Level]::All
[log4net.Config.BasicConfigurator]::Configure($FileApndr)

$EventApndr = new-object log4net.Appender.EventLogAppender((
    [log4net.Layout.ILayout](new-object log4net.Layout.PatternLayout('[%date{yyyy-MM-dd HH:mm:ss.fff}] %-5level %logger [%property{NDC}] - %message%newline'))
))
$EventApndr.Threshold = [Log4net.Core.Level]::All
$EventApndr.ApplicationName = "Foo Source"
$EventApndr.LogName = "Application"
[log4net.Config.BasicConfigurator]::Configure($EventApndr)

[log4net.Util.LogLog]::InternalDebugging = $true

$Log=[log4net.LogManager]::GetLogger("root");

$Log.Debug('Debug message.');
$Log.Info('Info message.');
$Log.Warn('Warn message.');
$Log.Error('Error message.');
$Log.Fatal('Fatal message.');

[log4net.LogManager]::ResetConfiguration();

Запись в текстовый файл работает правильно.

Спасибо,

...