Pythonでイベントログ(イベント ビューア)を取得する
PythonでWindowsのイベントログ(Applicationやシステムログ)を取得できないか調べていたところ、やり方がわかりましたのでメモしておきます。
win32拡張モジュールを使用します。
win32evtlogとwin32evtlogutilの2つ。
サンプルとしてはこんな感じです。
サンプルとしてはこんな感じです。
import win32evtlogimport win32evtlogutilcomputer = "MyHost"logType = "Application"h = win32evtlog.OpenEventLog(computer, logType)objects = win32evtlog.ReadEventLog(h, win32evtlog.EVENTLOG_BACKWARDS_READ|
win32evtlog.EVENTLOG_SEQUENTIAL_READ, 0)while objects:for object in objects:msg = win32evtlogutil.SafeFormatMessage(object, logType).encode("mbcs")if (object.EventType==1):# エラーのみ表示print msgobjects = win32evtlog.ReadEventLog(h, win32evtlog.EVENTLOG_BACKWARDS_READ|
win32evtlog.EVENTLOG_SEQUENTIAL_READ, 0)print '完了'
Python Win32拡張モジュールのマニュアルは以下のフォルダ内にあります。
C:\Python25\Lib\site-packages
PyWin32.chmというファイルです。
その中のヘルプにある
ReadEventLogの引数ですが、
次の2つを指定しなくてはいけません。
[読み取り方法]
EVENTLOG_SEEK_READ offsetの位置から取得
EVENTLOG_SEQUENTIAL_READ 同じハンドルを指定した ReadEventLog 関数の
前回の呼び出しの続きから読み取り操作を行います。
[読み取り順]
EVENTLOG_FORWARDS_READ 日付の古い方から順
EVENTLOG_BACKWARDS_READ 日付の新しい方から順
ループさせ、同じハンドルを呼んでいくと順次取得していきます。
目次:Pythonメモ
C:\Python25\Lib\site-packages
PyWin32.chmというファイルです。
その中のヘルプにある
ReadEventLogの引数ですが、
この中で分かりにくいのが取得フラグです。[object,...] = ReadEventLog(handle, flags , offset )
handle イベントログのハンドル
flags 取得フラグ
offset 読み取り操作を開始するログエントリのレコード番号
次の2つを指定しなくてはいけません。
[読み取り方法]
EVENTLOG_SEEK_READ offsetの位置から取得
EVENTLOG_SEQUENTIAL_READ 同じハンドルを指定した ReadEventLog 関数の
前回の呼び出しの続きから読み取り操作を行います。
[読み取り順]
EVENTLOG_FORWARDS_READ 日付の古い方から順
EVENTLOG_BACKWARDS_READ 日付の新しい方から順
ループさせ、同じハンドルを呼んでいくと順次取得していきます。
目次:Pythonメモ