Как регистрировать события в Windows IoT?

WebUI для Windows IoT (как показано на Raspberry PI) имеет следующий экран отслеживания событий:

введите здесь описание изображения

Как записать в журнал событий из программы uwp, а потом посмотреть, что там написано?

В этом ответе (который не касается Windows IoT) предполагается, что для него необходимо использовать стандартные классы System.Diagnostics.Tracing. Пример, на который ссылается этот ответ, — это демонстрация ведения журнала в файл. Я больше после регистрации во встроенном средстве, таком как ETW.

Следуя той же логике, что и в примере, я выполняю EventSource.Write и не выдает ошибку, но написанного сообщения нигде не видно.

Windows Powershell для Window IoT также не поддерживает команду Get-EventLog.

Разработка Windows IoT относительно новая, поэтому в Интернете не так много информации. В настоящее время лучшим источником является Ms Iot Samples, но, несмотря на огромное количество образцов, ни один из них не кажется делать какие-либо журналы событий.


person Andrew Savinykh    schedule 17.04.2016    source источник


Ответы (1)


  1. Прочтите и поймите Руководство пользователя EventSource
  2. Добавьте в свой проект класс, производный от EventSource и реализуйте свои методы, как описано в связанном руководстве. Пример реализации доступен здесь.
  3. Создайте свой проект, найдите выходные данные проекта (yourProject.winmd)
  4. Получите утилиту EventRegister.exe из здесь
  5. Выполнить EventRegister.exe -UsersGuide. Прочитайте и поймите использование.
  6. Выполнить eventRegister.exe -DumpRegDlls yourProject.winmd. Это создаст файлы yourProject.MyEwtProvider.etwManifest.dll и yourProject.MyEwtProvider.etwManifest.man.
  7. Создайте новую папку на своем устройстве Windows IoT, например, C:\Events, или используйте существующую.
  8. Откройте yourProject.MyEwtProvider.etwManifest.man в редакторе и отредактируйте пути resourceFileName и messageFileName так, чтобы родительская папка была C:\Events
  9. Скопируйте yourProject.MyEwtProvider.etwManifest.dll и yourProject.MyEwtProvider.etwManifest.man в свой Windows IoT в папку C:\Events. Примечание. Самый простой способ сделать это — открыть общий ресурс Windows как \\yourdevice\c$ в проводнике Windows
  10. Подключитесь к Windows IoT с помощью Powershell. Выполнить cd C:\Events
  11. Выполнить wevtutil.exe im .\yourProject.MyEwtProvider.etwManifest.man. Это не должно вызывать никаких предупреждений или ошибок. Подробнее о синтаксисе wevtutil.exe см. на этой странице.

Теперь, если вы перейдете на страницу веб-интерфейса ETW, как указано в вашем вопросе, в раскрывающемся списке появится «MyEwtProvider». Вы регистрируете события в своей программе, вызывая один из UwpEventSource.Log.Info/Warn/Debug/Critical/Error("Hello from my porgram");

Если вы не хотите собирать события, когда вы не работаете с WebUI, все готово. Если вы хотите сохранить их и проанализировать позже, выполните следующую команду в сеансе powershell:

echo y | wevtutil.exe sl MyEwtProvider/Debug /e:true

Посмотрите, что он делает здесь. Теперь вы сможете получить исторические данные (после их накопления), выполнив:

wevtutil.exe qe MyEwtProvider/Debug
person Andrew Savinykh    schedule 17.04.2016
comment
Могу я спросить, какие типы проектов вы используете? Я компилирую для Raspberry Pi, и мой проект не создает файл winmd. Я попытался переместить класс источника событий в проект компонента среды выполнения Windows, но он не примет наследование от EventSource. - person Jasper; 02.06.2016
comment
@Jasper, тип проекта — библиотека классов (Universal Widnows), а затем в свойствах проекта тип вывода выбирается как компонент среды выполнения Windows. - person Andrew Savinykh; 04.06.2016
comment
Как только я переключаю вывод на компонент среды выполнения Windows, я получаю следующие ошибки сборки: класс среды выполнения Windows «MyApp.Universal.Log.MinimalEventSource» имеет недопустимый базовый тип «System.Diagnostics.Tracing.EventSource». Классы должны быть производными либо от System.Object, либо от компонуемого класса среды выполнения Windows. Наследование реализации не допускается. - person Jasper; 04.06.2016
comment
@Jasper Как выглядит твой project.json? - person Andrew Savinykh; 04.06.2016
comment
{ зависимости: {Microsoft.NETCore.UniversalWindowsPlatform: 5.0.0}, фреймворки: {uap10.0: {}}, среды выполнения: {win10-arm: {}, win10-arm-aot: {}, win10-x86: { }, win10-x86-aot: {}, win10-x64-aot: {}, win10-x64-aot: {} } } - person Jasper; 04.06.2016
comment
@Jasper, я постараюсь опубликовать проект для вас, проблема в том, что мне нужно удалить из него все ненужное, и это займет некоторое время, которого у меня сейчас нет. Так что никаких обещаний, но я сделаю все возможное. - person Andrew Savinykh; 05.06.2016
comment
Было бы здорово @zespri, я все еще борюсь с этим - person Jasper; 21.06.2016