NLog: не удается записать в журнал событий

Я не могу записать в журнал событий с NLog. Я мог писать на консоль и в файл. Я включил исключения в NLog и не получаю отзывов от NLog.

Вот мой NLog.config:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      throwExceptions="true">
    <targets>
        <target name="console" xsi:type="Console" layout="${message}" />
        <target xsi:type="EventLog" name="eventlog" layout="${message}" log="Application" source="aaaTest"/>
        <target xsi:type="File" fileName="log.txt" name="file"/>
    </targets>

    <rules>
        <logger name="*" minlevel="Debug" writeTo="eventlog,console,file" />
    </rules>
</nlog>

В Event Viewer я смотрю "Event Viewer (Local)" > "Журналы Windows" > "Приложение". Тем не менее, я не вижу экземпляров "aaaTest" (мой определенный источник) в журнале.

Ответы

Ответ 1

Из nlog сообщение в форуме

Чтобы иметь возможность писать в EventLog, приложение должно быть зарегистрировано как источник события. Если вы запускаете VS как admin, это происходит автоматически. Если вы создаете установщик и устанавливаете приложение, он регистрируется.

Чтобы зарегистрировать приложение вручную в качестве источника события, я использую следующий script:

Set Args = WScript.Arguments
If Args.Count < 1 then
    WScript.Echo "USAGE: CreateEventSource.vbs <EventSourceName>"
    WScript.Quit
End If
EventSourceName = Args(0)

Set WshShell = WScript.CreateObject("WScript.Shell")

'Create event source
KeyName = "HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\Application\" & EventSourceName & "\EventMessageFile"
'Change path to .NET Framework version used
WshShell.RegWrite KeyName,"%windir%\Microsoft.NET\Framework64\v2.0.50727\EventLogMessages.dll", "REG_EXPAND_SZ"