В моем проекте я использую System.Diagnostics.Tracing.EventSource следующим образом:
namespace kafka4net.Tracing
{
[EventSource(Name = "kafka4net")]
public class ConnectionTrace : EventSource
{
public static ConnectionTrace Log = new ConnectionTrace();
public void Connecting(string host, int port)
{
Log.WriteEvent(1, host, port);
}
public void Connected(string host, int port)
{
Log.WriteEvent(2, host, port);
}
}
}
Я использую PerfView с функцией динамического провайдера, указав «*kafka4net» в поле «Дополнительные провайдеры». Это разрешает провайдера по его имени. Работает просто отлично. За одним исключением. События, которые я вижу, относятся к kafka4net/Connecting, тогда как я хотел бы видеть kafka4net/ConnectionTrace/Connecting.
Вообще говоря, я хочу, чтобы событие было продуктом/подсистемой/событием. Я вижу, что некоторые системные компоненты имеют такую структуру, например «Microsoft-Windows-DotNETRuntime/GC/Start».
Я пытался поставить [EventSource(Name = "kafka4net-Connection")], но я не могу использовать его как динамическое событие в PerfView, потому что мне пришлось бы перечислять все мои подсистемы, такие как "kafka4net-Connection, kafka4net-Fetcher" и т. д. , И это не идет.
EventSource имеет свойство Name, которое может быть «продуктом» верхнего уровня, а имя функции используется как самый низкий уровень в иерархии имен событий. Как вставить средний элемент «подсистема» в иерархию имен событий?