Я много лет борется с журналом событий Windows с непоследовательным поведением во время тестирования log4net EventLogAppender, и я понял, что работает код log4net, но мой журнал событий Windows был неразумным.Создание ранее удаленного источника в журнале событий не работает
Система
- ОС: Windows 8.1
- C#: .Net 4.5, построенный на x64
Создание случай ошибки
- C#: Создание Source1 в TestLog1
- C#: Запись в журнал (работ)
- Powershell: Удаление журнала с помощью PowerShell
- C# Создать source1 в TestLog2 (Different журнал)
- C# запись в журнал < = Это не показывает записи журнала TestLog2!
Я сделал полное руководство шаг за шагом, чтобы воссоздать проблему:
1: Создание нового источника в новом журнале и написать к нему
Код, выполняемый:
EventLog.CreateEventSource(source: "TestSource1", logName: "TestLog1");
EventLog myLog = new EventLog();
myLog.Source = "TestSource1";
myLog.WriteEntry("This is a message");
Список журналов с помощью PowerShell-команды:
Get-EventLog -LogName *
Это будет правильно список всех журналов, включая TestLog1, содержащий 1 запись в журнале. Я также могу получить записи журнала с помощью этой команды Powershell:
GetEventLog -LogName "TestLog1"
Это показывает мне одно сообщение журнала в журнале.
2: Удаление журнала событий с помощью Powershell
команды Powershell:
Remove-EventLog -LogName "TestLog1"
каталога всех журналов теперь показывает, что журнал действительно был удален.Команда Powershell снова:
Get-EventLog -LogName *
3: Создать источник снова, но в другом журнале этот раз
Код, выполняемый:
EventLog.CreateEventSource(source: "TestSource1", logName: "TestLog2"); // New log name
EventLog myLog = new EventLog();
myLog.Source = "TestSource1";
myLog.WriteEntry("This is a message");
Результат:
- Журнал появляется в powershell, когда Список всех журналов
- Журнал не содержит какую-либо запись
- Использования Get-EventLog «TestLog2» кидает и исключение, даже если он появляется в логе-списке
- Удаления журнала в PowerShell с помощью удаления-EventLog -logName " TestLog2 "как-то все еще работает.
Похоже, что в некоторых случаях журналы существуют, но в других это не так.
A: Это известная ошибка или что не так с моим сценарием?
B: Как я могу очистить свой существующий беспорядок, если источники как-то все еще существуют, указывая на старый журнал? (Если тот случай, то есть)
EDIT: Я даже пробовал следующий C# код для удаления источника первым, а затем журнал, но результат тот же:
var source = "TestSource6";
var logName1 = "Testlog5";
var logName2 = "Testlog6";
EventLog.CreateEventSource(source: source, logName: logName1);
new EventLog() { Source = source }.WriteEntry("This is a message in log " + logName1);
EventLog.DeleteEventSource(source:source);
EventLog.Delete(logName:logName1);
EventLog.CreateEventSource(source: source, logName: logName2);
new EventLog() { Source = source }.WriteEntry("This is a message" + logName2);
Это, похоже, решает проблему. Спасибо, что нашли время ответить! :) –