Я пытаюсь реализовать ETW с помощью специального класса на основе EventSource (как и предполагалось). Я прекрасно вижу журналы при использовании базы конструктор
public class TestSource : EventSource
{
public static readonly TestSource Log = new TestSource();
public TestSource() : base() { }
public void LogMe(string msg)
{
WriteEvent(1, msg);
}
}
но когда я переключаюсь на использование конструктора , который позволяет вам определить имя
public TestSource() : base("TestSource") { }
Журналы больше не появляются.
У меня нет проблем в конструкторе (Я использовал этот флаг для выдачи ошибок конструкции) или при вызове для записи журнала (также использовал этот флаг). Кроме того, IsEnabled равно "true" как только я добавлю источник в окно диагностических событий в Visual Studio.
Таким образом, источник регистрируется правильно, и метод Write выполняется успешно, но журнал фактически никогда не отправляется. Все выглядит так же, как когда я использую base()
, но журналы не появятся, если я не использую этот конструктор. Что-то мне не хватает или это ошибка?
Согласно запросу Сулимана для всего кода, он находится в контроллере WebApi, работающем в службе Service Fabric:
public class TestController : ApiController
{
[EventSource(Name = "TestSource")]
public class TestSource : EventSource
{
public static readonly TestSource Log = new TestSource();
public TestSource() : base()
{
}
public void LogMe(string msg)
{
WriteEvent(1, msg);
}
}
public IEnumerable<string> Get()
{
TestSource.Log.LogMe("Hello!");
return new string[] {"value1", "value2"};
}
}
(Эта версия работает, потому что в ней используется конструктор без параметров.)