Журнал событий Windows - как зарегистрировать источник событий?
Я создаю новый источник событий и регистрирую сообщение, используя следующий код:
static void Main(string[] args)
{
if (!EventLog.SourceExists("My Log"))
{
EventLog.CreateEventSource("My Application", "My Log");
Console.WriteLine("Created new log \"My Log\"");
}
EventLog myLog = new EventLog("My Log");
myLog.Source = "My Application";
myLog.WriteEntry("Could not connect", EventLogEntryType.Error, 1001, 1);
}
Создан пользовательский журнал событий с именем "Мой журнал" (как и ожидалось), но сообщение регистрируется под "Приложением" node. Что я делаю неправильно?
Ответы
Ответ 1
В MSDN следующее примечание:
Если источник уже сопоставлен с журналом и перенаправлен на новый журнал, вы должны перезагрузить компьютер, чтобы изменения вступили в силу.
Возможно ли, когда вы пытаетесь выполнить код, который вы ранее пытались записать в журнал приложений, и теперь вам нужно перезагрузить его, чтобы "размонтировать" эту ссылку?
Ответ 2
У вас, кажется, что-то перепуталось где-то там, я думаю.
У вас есть источник (который является вашим приложением), и этот источник связан с журналом, это делается при создании источника
Вы немного смешали их в начале вашего кода, на самом деле это должно быть
if (!EventLog.SourceExists("My Application"))
Я только что написал небольшой код, чтобы помочь мне в этом. источник, зарегистрированный в другой проблеме журнала, с которой я столкнулся, и не хочу вручную удалять источники из журналов.
То, что я решил сделать, это проверить, существует ли источник, если он проверяет, что он связан с правильным журналом, если он не удаляет исходный код, теперь, когда он не существует, или f никогда не создавал новый Log Log,
protected const string EventLogName = "MyLog";
private static bool CheckSourceExists(string source) {
if (EventLog.SourceExists(source)) {
EventLog evLog = new EventLog {Source = source};
if (evLog.Log != EventLogName) {
EventLog.DeleteEventSource(source);
}
}
if (!EventLog.SourceExists(source)) {
EventLog.CreateEventSource(source, EventLogName);
EventLog.WriteEntry(source, String.Format("Event Log Created '{0}'/'{1}'", EventLogName, source), EventLogEntryType.Information);
}
return EventLog.SourceExists(source);
}
public static void WriteEventToMyLog(string source, string text, EventLogEntryType type) {
if (CheckSourceExists(source)) {
EventLog.WriteEntry(source, text, type);
}
}
Надеюсь, это поможет:)