这是我在 ServerFault 上的第一篇文章,但我喜欢 StackOverflow。我是一名程序员,因此我更喜欢使用 IDE 而不是注册表,所以我来这里寻求帮助。
问题:我有一系列记录器
CustomLogger(使用自定义 EventId 附加日志消息,该消息在 NTEventLogAppender 中解析出来)--> slf4j --> log4j --> NTEventLogAppender
日志最终被 NTEventLogAppender 使用,我已对其进行了修改,以便从 CustomLogger 解析原始消息的附加 EventID,并且它工作正常。但是,当使用自定义 EventID 生成消息时,它会显示:
无法找到事件 ID (blah) 的描述(来源 (Order Station Jetty Server Diag))。本地计算机可能没有显示远程计算机消息所需的注册表信息或消息 DLL 文件。您可以使用 /AUXSOURCE= 标志来检索此描述;有关详细信息,请参阅“帮助和支持”。以下信息是事件的一部分:111219 [main] INFO
我需要删除所有自定义日志消息开头的这个固定消息。
我已经编辑了 EventLogCategories.mc 文件以反映所有新代码,如下所示:
; example of new logging code
MessageId=0x45
Language=English
No logging code was given, using default logging code %1
.
并运行 build.bat 文件,该文件生成一个 NTEventLogAppender.dll 文件,然后我将其放在适当的目录中并在其上运行 regsvr32。
我还查看了 Apache 的常见问题解答,http://logging.apache.org/log4j/1.2/faq.html#a2.10,并将NTEventLogAppender.dll复制到%SYSTEMROOT%\SYSTEM32目录下,但无济于事。
此外我还看到了这一点,https://issues.apache.org/bugzilla/show_bug.cgi?id=37866,然后又把Microsoft Message Compiler(mc.exe)和MinGW添加到系统Path环境变量中,重新编译、复制、注册……都无济于事。
最后,我尝试在 Apache Logging-log4j-user 论坛上发帖(链接被删除,因为我是新用户,并且禁止在帖子中发布两个以上的链接),但是[电子邮件保护]地址刚刚退回给我。
谁知道我还可能在哪里出错了?
答案1
解决方案:删除注册表中项目的 NTEventLogAppender 的键,然后从 VS2010 命令行界面运行 build.bat,并将 NTEventLogAppender 复制到项目文件夹中的适当位置。
无需涉及mc.exe或rc.exe,无需复制到\System32目录。