Использование библиотеки Microsoft.Diagnostics.Tracing.TraceEvent упрощает работу с журналами ETW на local machine
, но есть ли способ сделать то же самое для remote server
? Вот как я могу получить интересующие события на локальной машине. Действительно интересно, как можно добиться того же результата в случае, если события генерируются для другой машины.
public LoggingEventArgs ListenForEvent(string eventName, int level, int maxWaitTimeInSec = 30)
{
if (!(TraceEventSession.IsElevated() ?? false))
{
_logger.Error("To turn on ETW events you need to be Administrator.");
return null;
}
LoggingEventArgs result = null;
_logger.Info("Creating a '{0}' session", _sessionName);
using (var session = new TraceEventSession(_sessionName))
{
_timer = ConstructTimerForSession(session, maxWaitTimeInSec);
TargetEventReceived += delegate (object sender, LoggingEventArgs e)
{
//if level is not negative, check for specific level of incoming event.
//Otherwise track all levels
bool condition = level > 0 ? e.Level == level : true;
if (condition)
{
result = e;
StopListeningForEvents(session);
}
};
AddCallbackForProviderEvent(session, _providerName, eventName);
StartListeningForEvents(session, _providerName, _timer);
}
return result;
}