Как выполнить запись в пользовательский журнал событий Windows?

StackOverflow https://stackoverflow.com/questions/804284

  •  03-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь настроить базовую регистрацию в журнале событий 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, и он ничего не записывал, так что это часть устранения этой проблемы.)

Это было полезно?

Решение

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top