以下代码从本地计算机的
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
转化为人类可读的文本?
不要尝试使用原始数据,而是使用 EventLogRecord.getStrings()。