如何从Java写入Windows事件日志?

25

我该如何使用Java将内容写入Windows事件日志?

4个回答

24

Log4J是一个不错的选择,因为您的代码不会与底层日志记录目标耦合,并且可以通过XML轻松配置。 - Brian Matthews
1
NTEventLogAppender的一个大问题是它需要将本地DLL放置在各种你不想要的地方。 - dB.
似乎在log4j2中不可用,我认为也没有替代品。 - Stroboskop
到了2023年,似乎这个答案是最好的(JNA):https://dev59.com/X3VC5IYBdhLWcg3w2lCI#3815771 - Lou Franco

10
你可以使用JNA直接写入事件日志,而无需任何本地DLL。请参阅Advapi32和Advapi32Util类以获取各种事件日志方法(自JNA 3.2.8起提供)。
如果您正在使用Log4j,请考虑使用Log4jna代替NTEventLogAppender。

2
Log4jna已经迁移到GITHUB,以防上面的链接失效。 - Qben

7

您也可以在Windows XP Pro及以上版本中使用eventcreate命令。

String command = "eventcreate "
               + " /l APPLICATION"
               + " /so \"" + applicationObjectName + "\""
               + " /t " + lvl
               + " /id " + id
               + " /d \"" + description + "\"";

Runtime.getRuntime().exec(command);

对于XP Home及以下版本,您可以创建一个使用wscript.shell.eventcreate方法编写的vbs应用程序。然而,您会牺牲指定源的能力。

例如:http://www.ozzu.com/mswindows-forum/posting-event-log-with-batch-files-t76791.html


1
如何定义applicationObjectName,lvl等。 - ChanGan

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接