Каким образом можно отобразить кастомные логи приложения в Windows Event Viewer?

Добрый день, уважаемый читатель!

Не буду тянуть резину, кратко и быстро расскажу основную последовательность действий, которые помогут тебе или твоей команде отображать кастомные логи в виндовом журнале событий для вашего приложения. Разберем на примере:

Дано: У нас есть некоторое приложение, для которого мы создаем оснастку yyyy: "Windows Event Viewer\Application and Services Logs\уууу".

Неудачный фактический результат. При работе приложения и записи логов в данную оснастку мы увидим ошибки вида:

Каким образом можно отобразить кастомные логи приложения в Windows Event Viewer?

Это означает, что источник событий yyyy не содержит в себе необходимый набор ID и Description.

Решение. Для того, чтобы исправить данную ситуацию, необходимо:

1. Открыть regedit по следующему пути: "HKLM\SYSTEM\CurrentControlSet\Services\EventLog" и убедиться в существовании вашего раздела.

2. Создать eventMessage.txt в который необходимо поместить ваши параметры, пример с msdn, сохранить в необходимой кодировке Windows-1251 или Unicode и формате eventMessage.mc.
Примечание: при наполнении eventMessage вашими ID и description всегда после описания необходимо ставить точку с новой строки, и после нее переводить каретку на новую строку. Если не учесть данной особенности, то могут быть непредвиденные ошибки во время компиляции.
Пример:

MessageId=0x1 SymbolicName=CAT_1 Language=English OutDescription for your application . MessageId=0x2

3. Запустить терминал (cmd).

4. Выполнить команду: "mc.exe -u C:\SomeFolder\eventMessage.mc -r C:\SomeFolder\result" , где SomeFolder - некоторый каталог, в котором сохранили файлы из пункта 2.

Примечание: mc.exe, в частном случае, находится в "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86" вместо формата -u (Unicode) можно использовать -A (W-1251 или ANSI, данный формат по умолчанию), а параметр -r является выходным расположением, куда будут сохранены файлы после компиляции.

5. После выполнения команды (пункт 4)будут созданы: бинарный файл и файл eventMessage.rc в "C:\SomeFolder\result".

6. Выполнить команду: "rc.exe C:\SomeFolder\result\eventMessage.rc".

Примечание: rc.exe находится в том же каталоге, где и mc.exe.

7. После команды компиляции (пункт 6) будет создан файл eventMessage.res, который необходим для создания динамической библиотеки (.dll).

8. Выполнить команду: "link.exe -dll -noentry /out:C:\SomeFolder\result\OurMessageSet.dll C:\SomeFolder\result\eventMessage.res".

Примечание: link.exe находится, в частном случае, в "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\SDK\ScopeCppSDK\VC\bin".

9. Поздравляю, мы создали с Вами долгожданную библиотеку, но это еще не все. Заходим в regedit к нашему каталогу из пункта 1. В поле каталога создаем строковый параметр (string value), именуя сиё творение в EventMessageFile, а в значении указываем путь до нашей библиотеки: "C:\SomeFolder\result\OurMessageSet.dll".

Пример:

Каким образом можно отобразить кастомные логи приложения в Windows Event Viewer?

10. Запускаем приложение, наслаждаемся логами в нашей оснастке: "Windows Event Viewer\Application and Services Logs\уууу".

Инфо. Рассмотренные инструменты: mc.exe, rc.exe, link.exe.

Начать дискуссию