Как мне написать в пользовательский журнал событий Windows? - PullRequest
3 голосов
/ 30 апреля 2009

Я пытаюсь настроить базовую регистрацию в журнале событий Windows в .net через System.Diagnostics.EventLog, но мне не удается увидеть какие-либо события, записываемые в журнал. Рассмотрим следующий код:

// Elsewhere in the class
private static readonly string EventLogName = "LogName";
private static readonly string EventLogSource = "AppName";

// In the only function that does something
if (!EventLog.Exists(EventLogName))
{
    EventLog.CreateEventSource(EventLogSource, EventLogName);
    return;
}
else
{
    Trace.TraceInformation("Attempting log");

    // This doesn't write anything
    EventLog.WriteEntry(EventLogSource, 
        "StaticWriteEntry", 
        EventLogEntryType.Error);

    // Neither does this
    using (var log = new EventLog())
    {
        log.Log = EventLogName;
        log.Source = EventLogSource;
        log.WriteEntry("WriteEntry?", EventLogEntryType.Error);
    }
}
return;

Первый раз, когда я создаю журнал и выхожу из приложения, по образцу MSDN. Это создание журнала в конечном итоге перейдет в настройку, конечно. Последующие запуски пытаются записать сообщение в созданный журнал событий.

Нет исключений. Журнал, кажется, успешно создан (я могу открыть его в средстве просмотра событий Windows). В журнал безопасности ничего не заносится.

Сообщения не регистрируются через WriteEntry(). Они также не помещаются в журнал приложений из-за несоответствия имени. В данном конкретном случае я работаю на Server2008 в учетной записи администратора с отключенным UAC. (Это небольшой кусок более крупного унаследованного продукта, для которого требуется неблагоприятная среда.) Что я делаю не так?

(Я делаю это, потому что я хочу использовать EventLogTraceListener в моем app.config, и он ничего не писал, так что это часть устранения этой проблемы.)

1 Ответ

4 голосов
/ 30 апреля 2009

Кажется, проблема связана с именем источника. В частности, если я изменю имя источника, я могу успешно написать. Это связано со следующей строкой внизу документа EventLog.Source:

Если источник уже сопоставлен с журналом, и вы переназначаете его в новый журнал, необходимо перезагрузить компьютер, чтобы изменения вступили в силу.

В ходе разработки имя журнала и источник журнала создавались и уничтожались пару раз, и я мог изменить имя журнала без изменения имени источника.

Предположим, что мой исходный источник и журнал были "OldSource" и "OldLog". Я определил, что это может быть источником проблемы, изменив код для попытки записи на "NewSource" и "NewLog". Когда я изменил оба, я успешно создал и написал "NewLog". Однако когда я попытался записать в "NewLog", создав его с помощью "OldSource", это не удалось.

Я подтвердил, что это была проблема, перезагрузив мою систему разработки и запустив точно такой же код (с "NewLog" и "OldSource"), и он заработал.

Я полагаю, что это однажды, когда перезагрузка действительно исправила это! :)

...