从 Windows 事件日志中读取事件并格式化事件

问题描述 投票:0回答:1

以下代码从本地计算机的

Windows Event Log
读取并打印事件。

import java.io.UnsupportedEncodingException;
import java.util.Date;

import com.sun.jna.platform.win32.Advapi32Util.EventLogIterator;
import com.sun.jna.platform.win32.Advapi32Util.EventLogRecord;
import com.sun.jna.platform.win32.WinNT;

public class EventLog {

    public static void main(String[] args) throws UnsupportedEncodingException {
        EventLogIterator iter = new EventLogIterator(null, "Application", WinNT.EVENTLOG_FORWARDS_READ);
        while (iter.hasNext()) {
            EventLogRecord record = iter.next();
            if (record.getData() == null) {
                continue;
            }
            Date eventTime = new Date(record.getRecord().TimeGenerated.longValue() * 1000L);
            String data = new String(record.getData(), "windows-1252");
            System.out.println(record.getRecordNumber() + " Event Time: " + eventTime + //
                               ": Event ID: " + record.getInstanceId() + //
                               ", Event Type: " + record.getType() + //
                               ", Event Data: " + data + //
                               ", Event Source: " + record.getSource());
        }
    }
}

问题是事件

data
byte
数组 (
byte[]
) 的形式出现,但我需要正确格式化的文本。我尝试使用不同的编码将这个
data
转换为
String
,但没有一个产生预期的结果。

String data = new String(record.getData(), "windows-1252");

如何将事件

data
转化为人类可读的文本?

java windows jna event-log
1个回答
0
投票

不要尝试使用原始数据,而是使用 EventLogRecord.getStrings()

© www.soinside.com 2019 - 2024. All rights reserved.