Я пишу собственный класс EventSource и добавляю метод для журнала, как показано ниже:
[EventSource(Name = "MyCompany")]
public class MyCompanyEventSource : EventSource
{
[Event(6, Message = "test.", Keywords = Keywords.Perf,
Level = EventLevel.Warning)]
public void Test()
{
this.WriteEvent(6);
}
}
И я использовал SemanticLogging-svc.exe -c для запуска службы событий трассировки, и перед выполнением этой команды я также настроил SemanticLogging-svc.xml на
<eventSource name="MyCompany" level="LogAlways"/>
И затем я начинаю вызывать метод Test(). Впервые flatFileSink запишет правильный уровень события как предупреждение. Однако после того, как я изменил уровень метода Test() в атрибуте на Critical и вызвал метод Test(), flatFileSink по-прежнему будет записывать уровень как Warning. Это было совершенно неправильно! Я знаю, что это была схема EventEntry, которая является параметром метода OnNext. Но если я использую прослушиватель в процессе, уровень может быть обновлен до критического, что правильно.
Итак, почему уровень все еще старый, если я использую внепроцессный? Это что-то не так с ETW? Похоже, в машине есть кеш. И этот кеш не может быть очищен независимо от остановки и удаления сеанса трассировки событий в системном мониторе или перезагрузки компьютера. Я очень хочу очистить этот кеш, но я не знаю, как это сделать.
И я знаю, что если я изменил версию в атрибуте события или изменил имя источника событий на другое, уровень будет обновлен для внепроцессного. Но я думаю, что это не очень хороший способ, поскольку мы можем забыть изменить версию.
Итак, может ли кто-нибудь помочь мне?