9. [pywin32] ReadEventLog() 함수

pywin32/win32evtlog|2020. 7. 25. 00:25

[object,...] = ReadEventLog(Handle, Flags , Offset , Size )

 

OpenEventLog로 열었던 이벤트 로그의 내용을 읽어오는 함수입니다.

 

인자로는 Handle : PyHANDLE, Flags : int, Offset : int, Size=4096 : int가 있습니다.

 

Handle 은 OpenEventLog의 리턴값인 PyEVTLOG_HANDLE 값이 들어갈 수 있습니다

PyEVTLOG_HANDLE이 PyHANDLE을 상속했기 때문에 가능합니다.

 

Flags는 로그를 어떤식으로 읽을지 정하는 값입니다.

의미
win32evtlog.EVENTLOG_SEEK_READ 로그를 Offset 부터 읽는다.
* 현재 이 값은 오류로 인해 잘 되지 않는 듯 합니다.
support.microsoft.com/ko-kr/help/177199/bug-readeventlog-fails-with-error-87
win32evtlog.EVENTLOG_SEQUENTIAL_READ 로그를 순서대로 읽는다.
의미
win32evtlog.EVENTLOG_FORWARDS_READ 로그를 옛날 거부터 읽는다.(old to new)
win32evtlog.EVENTLOG_BACKWARDS_READ 로그를 최신 거 부터 읽는다.(new to old)

Flag 값은 위의 값을 조합해서 설정하니다.

 

Offset은 win32evtlog.EVENTLOG_SEEK_READ이 설정될 때 의미있는 값입니다. 로그를 Offset부터 읽습니다.

 

Size=4096은 리턴값의 사이즈인데, 4096의 기본값을 사용하면 될 듯 합니다.

 

ReadEventLog 함수의 리턴값은 PyEventLogRecord Object를 갖는 리스트 형식인 듯 합니다.

PyEventLogRecord 의 속성 : timgolden.me.uk/pywin32-docs/PyEventLogRecord.html

import win32evtlog

pHandle = win32evtlog.OpenEventLog(None, "Application")
# Application 로그를 오픈

flag = win32evtlog.EVENTLOG_SE | win32evtlog.EVENTLOG_BACKWARDS_READ

num = win32evtlog.GetNumberOfEventLogRecords(pHandle)
# Application 로그의 현재 갯수 출력
print(f"{num}")

for i in range(num): # 로그의 현재 갯수 만큼 호출
    x = win32evtlog.ReadEventLog(pHandle, flag, 0)
    # 로그 Read    

    for j in x:
        print(f"{j.TimeGenerated}")
        # 편의상 시간 정보만 출

win32evtlog.CloseEventLog(pHandle)
# 로그 핸들 반환

예제를 실행한 결과로 227개의 로그를 최신거 부터 순서대로 시간 정보만을 출력한 결과입니다.

반응형

댓글()