Я работаю над приложением на основе UWP для Windows 10 IoT и я хотел настроить ETW Трассировка таким образом я могу просмотреть регистрации удаленно с помощью встроенного веб-интерфейса:Trouble регистрируя поставщика ETW
I полагаю, что я создал необходимые типы, однако я не могу видеть мой провайдер в любом из списков, представленных в разделе IoT ETW:
Мои EventListener реализация:
sealed class StorageFileEventListener : EventListener
{
/// <summary>
/// Storage file to be used to write logs
/// </summary>
private StorageFile _mStorageFile = null;
/// <summary>
/// Name of the current event listener
/// </summary>
private readonly string _mName;
public StorageFileEventListener(string name)
{
_mName = name;
Debug.WriteLine("StorageFileEventListener for {0} has name {1}", GetHashCode(), name);
AssignLocalFile();
}
private async void AssignLocalFile()
{
_mStorageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(_mName.Replace(" ", "_") + ".log",
CreationCollisionOption.OpenIfExists);
}
private async void WriteToFile(IEnumerable<string> lines)
{
// TODO:
}
protected override void OnEventWritten(EventWrittenEventArgs eventData)
{
// TODO:
}
protected override void OnEventSourceCreated(EventSource eventSource)
{
// TODO:
}
}
Мой EventSource реализация:
internal sealed class Logger : EventSource
{
public static Logger Log = new Logger();
[Event(1, Level = EventLevel.Verbose)]
public void Debug(string message, Exception exception)
{
var exceptionMessage = GenerateExceptionMessage(exception);
WriteEvent(1, message + exceptionMessage);
}
[Event(2, Level = EventLevel.Informational)]
public void Info(string message, Exception exception)
{
var exceptionMessage = GenerateExceptionMessage(exception);
WriteEvent(2, message + exceptionMessage);
}
[Event(3, Level = EventLevel.Warning)]
public void Warn(string message, Exception exception)
{
var exceptionMessage = GenerateExceptionMessage(exception);
WriteEvent(3, message + exceptionMessage);
}
[Event(4, Level = EventLevel.Error)]
public void Error(string message, Exception exception)
{
var exceptionMessage = GenerateExceptionMessage(exception);
WriteEvent(4, message + exceptionMessage);
}
[Event(5, Level = EventLevel.Critical)]
public void Critical(string message, Exception exception)
{
var exceptionMessage = GenerateExceptionMessage(exception);
WriteEvent(5, message + exceptionMessage);
}
private static string GenerateExceptionMessage(Exception exception)
{
return exception != null ? $" Exception message - {exception.Message} :: InnerException - {exception.InnerException} :: StackTrace - {exception.StackTrace}"
: "";
}
}
Наконец, я инициализироваться и настроить свои EventSource/типы EventListener так:
EventListener genericListener = new StorageFileEventListener("MyIoTListener");
genericListener.EnableEvents(Logger.Log, EventLevel.Critical);
Am I отсутствует фундаментальный шаг?
Поскольку EventSource генерирует GUID из имени, вы должны использовать https://github.com/jonwagner/EventSourceProxy/wiki/Getting-the-EventSource-Manifest-or-GUID, чтобы получить GUID –