我正在尝试写入Windows事件日志,但遇到了麻烦的问题。

首先,我使用此处找到的步骤创建了NTEventAppender。
How to create NTEventlogAppender.dll as required for logging event in the eventlog using log4cplus

我将.dll放在System32文件夹中。当我在Eclipse中构建并运行程序时,收到此错误

java.lang.UnsatisfiedLinkError: org.apache.log4j.nt.NTEventLogAppender.registerEventSource(Ljava/lang/String;Ljava/lang/String;)I
    at org.apache.log4j.nt.NTEventLogAppender.registerEventSource(Native Method)
    at org.apache.log4j.nt.NTEventLogAppender.<init>(NTEventLogAppender.java:79)
    at org.apache.log4j.nt.NTEventLogAppender.<init>(NTEventLogAppender.java:49)
    at mahle.eolx.ws.Main.<clinit>(Main.java:30)
Exception in thread "main"


我是否需要做一些不同的事情,因为这是一个Java应用程序,而上面链接的问题是C ++应用程序。

如果是这样,我该怎么办。

编辑:我发现我应该使用log4j下载中包含的NTEventLogAppender.dll,但是我仍然遇到相同的错误。

最佳答案

我无法使它正常工作,但是我可以通过为NTEventLogAppender(https://github.com/dblock/log4jna)使用log4jna来登录事件查看器。

我采取了这些步骤

下载log4j并将.jar文件包含在您的项目http://logging.apache.org/log4j/1.2/download.html

下载用于替换NTEventLogAppender的log4jna并将必要的jar添加到您的项目(log4jna,jna,平台)http://log4jna.codeplex.com/

您将需要在应用程序目录中的某个位置添加Win32EventLogAppender.dll。

为了使记录器记录有意义的消息,您需要更改注册表

 Windows Registry Editor Version 5.00

 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\"YourAppNameHere"]
 "EventMessageFile"="C:\\Program Files\\"Your Application"\\Win32EventLogAppender.dll"
 "CategoryMessageFile"="C:\\Program Files\\"Your Application"\\Win32EventLogAppender.dll"
 "TypesSupported"=dword:00000007
 "CategoryCount"=dword:00000006

09-25 19:24