您的位置:首頁 >熱訊 > 健康 >

環球訊息:如何通過Java讀取到Windows系統日志evtx文件

近日公司有個需求,需要調研如何使用Java來讀取Windows日志文件(類型:應用程序,安全,Setup,系統)

一番調研以后,在僅使用java的基礎上系統日志文件似乎不太可能(就個人調研結果來看),再通過多渠道查詢(百度、chargpt),找到2個可能的實現的方案:

1、使用Java來調用C++方法

JNA(Java Native Access)是可以讓Java調用C++生成的DLL(動態鏈接庫),將C++中的方法,以Java接口的方式來實現。注:該方法理論是是可行的,但編者沒有實踐。。。


(資料圖片)

2、使用第三方工具來實現,微軟的日志分析工具-LogParser2.1 實現思路:

在本地安裝LogParser,Java代碼通過調用本機命令行的方式,調用LogParser,然后把分析后的結果,以csv的方式輸出到文件中(LogParser可選多種輸出方式),然后java再讀取csv文件內容即可拿到日志信息。

2.2 Java調用命令行的代碼
try {    String logParserPath = "D:\\Program Files (x86)\\Log Parser 2.2\\LogParser.exe";    ProcessBuilder processBuilder = new ProcessBuilder(logParserPath, "-i:EVT", "-o:csv", "SELECT * INTO D:\\output.csv FROM D:\\Security.evtx");    Process process = processBuilder.start();    process.waitFor();} catch (IOException | InterruptedException e) {    e.printStackTrace();}

其中:D:\output.csv 為存儲輸出結果的文件地址,D:\Security.evtx為日志文件

2.3、 關于LogParser的一些使用文檔信息

2.3.1:Log Parser的日志可以通過SQL進行查詢

sql字段:

EventLog(S)       RecordNumber(I)   TimeGenerated(T)  TimeWritten(T)    EventID(I)        EventType(I)  EventTypeName(S)  EventCategory(I)  EventCategoryName(S)  SourceName(S)     Strings(S)        ComputerName(S)  SID(S)            Message(S)        Data(s) 

S:String 數組

調用格式:

EXTRACT_TOKEN(EventTypeName, 0, "|") )  EventTypeName:字段名  0:順序,從0開始  |:分隔符

T:Time。時間類I:intger。整數類

T和I二者都是直接調用:

SELECT     TO_DATE(TimeGenerated),     RecordNumber,    TO_UPPERCASE(EXTRACT_TOKEN(EventTypeName, 0, "|")), SourceName   FROM System

字段解析:RecordNumber:日志記錄編號從0開始TimeGenerated:事件生成時間TimeWritten:事件記錄時間EventID:事件IDEventType:事件類型Strings:字符串數組,應該對應者日志中的EventData,每個事件包含的信息應該不一樣這里只羅列了一部分字段,還有其它字段大家按需了解使用即可。

寫在最后:此貼為編者自己記錄所用,僅供參考寫的比較亂,如有筆誤,請指正未完待續

關鍵詞: