【问题标题】:How to write from Java to the Windows Event Log?如何从 Java 写入 Windows 事件日志?
【发布时间】:2008-10-02 22:20:36
【问题描述】:

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

【问题讨论】:

    标签: java windows logging event-log


    【解决方案1】:

    Log4J 是一个基于 Java 的日志记录实用程序。 NTEventLogAppender 类可用于“附加到 NT 事件日志系统”。请参阅此处的文档:

    http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/nt/NTEventLogAppender.html

    编辑:有一个较新的版本,Log4j 2,“与之前的版本相比有了显着的改进。”

    【讨论】:

    • Log4J 是一个不错的选择,因为您的代码不会与底层日志记录目标耦合,并且可以通过 XML 轻松配置。
    • NTEventLogAppender 的一个大问题是它需要将原生 DLL 放置在您不希望的各种地方。
    【解决方案2】:

    您可以使用JNA 直接写入事件日志,而无需任何本机 DLL。有关各种事件日志方法(自 JNA 3.2.8 起提供),请参阅 Advapi32 和 Advapi32Util 类。

    如果您使用 Log4j,请考虑使用Log4jna 而不是 NTEventLogAppender。

    【讨论】:

    • Log4jna 已移至GITHUB,以防上面的链接停止工作。
    【解决方案3】:

    早在 2001 年 JavaWorld 就发表了一篇关于如何write messages to the Windows NT Event Log. 的文章,或者,您可以看看 Log4j NTEventLogAppender 类。

    【讨论】:

      【解决方案4】:

      您还可以在 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

      【讨论】:

      • 如何定义applicationObjectName、lvl等
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 2014-12-25
      相关资源
      最近更新 更多