2020年2月22日土曜日

Python for Win32 Extensions(Pywin32)でイベントログ(Eventlog)アクセス

イベントログを取得する用件がありPythonで処理してみることに。

WEBで検索してみると意外に容易にできそうな感じでPython for Win32 Extensions(Pywin32)のwin32evtlogモジュールのReadEventLogメソッドを使用。ただ思ったほど情報は多くないけれどサンプルソースからなんとか。。。

ReadEventLogメソッドの戻り値(PyEventLogRecordオブジェクト)のプロパティからイベントビューアーにあるレベルに該当するものを探してみると同じ名前のものはなくそれらしいのはEventTypeぐらい。

ただ、調べてみると値が微妙に違う・・・

EventTypeイベントビューアーのレベルEVENTCREATEコマンドの種類(/T)
0:成功情報 Level:0SUCCESS
1:エラーエラー Level:2ERROR
2:警告警告 Level:3WARNING
4:情報情報 Level:4INFORMATION

win32evtlogの定数をDIR関数で調べてみるとEventTypeに使えそうなものが以下の様な感じかも。


  • EVENTLOG_ERROR_TYPE : 1
  • EVENTLOG_WARNING_TYPE : 2
  • EVENTLOG_INFORMATION_TYPE : 4
  • EVENTLOG_AUDIT_SUCCESS : 8
  • EVENTLOG_AUDIT_FAILURE : 16
ついでに気になったこと(上手く実装できなかった箇所)
  • win32evtlogutil.SafeFormatMessageでイベントビューアーに表示しているメッセージを取得できないイベントが存在した。
  • イベントビューアーに表示しているイベントID(EventId)とは異なっていた。