在Windows Server 2008下使用Log4j NTEventLogAppender和ActiveMQ作为服务运行

时间:2011-03-17 14:38:55

标签: log4j windows-server-2008 activemq

我正在尝试使用Log4J的NTEventLogAppender将ERROR级别消息记录到Windows“应用程序”事件日志中,以便在Windows Server 2008,SP2 32位上运行作为服务的ActiveMQ 5.4.2的现有安装(在我们的生产环境中,服务器监控软件,Solar Windows,密切关注Windows事件日志并聚合写入它的某些信息)。我获得了32位“NTEventLogAppender.dll”并将其复制到c:\ windows \ system32。

我对Log4J非常熟悉,但对NTEventLogAppender appender却不熟悉。

如果我在控制台窗口中启动ActiveMQ(或者以“管理员”身份运行),一切都很顺利。但是,如果我将ActiveMQ作为服务启动(例如“net start activemq”),则服务包装器启动但ActiveMQ本身会发生爆炸(由于Log4J中的调用到NTEventLogAppender)。在log4j.properties中注释掉适用的NTEventLogAppender行可以解决问题。

当ActiveMQ / NTEventLogAppender作为服务运行而不是作为我的权限下的前台应用程序运行时,似乎就像Server 2008权限问题一样。如果问题的详细信息记录在操作系统的某个地方,我还没有找到它。

顺便说一下,我最初编写了一个小的“hello world”控制台应用程序,只是为了看看我是否可以在这台机器上使用NTEventLogAppender写入事件日志。不是一个完美的测试,但它有效,所以我知道在某些情况下,我可以使NTEventLogAppender工作(在非管理员控制台中运行应用程序)。

对于它的价值,这里是log4j.properties的适用代码片段:

log4j.appender.NTEVENT = org.apache.log4j.nt.NTEventLogAppender log4j.appender.NTEVENT.source = ActiveMQ的 log4j.appender.NTEVENT.layout = org.apache.log4j.PatternLayout log4j.appender.NTEVENT.layout.ConversionPattern =%d | %-5p | %m | %c | %T%N log4j.appender.NTEVENT.threshold = ERROR

此外,此密钥当前存在于注册表中:

[HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \服务\事件日志\应用程序\的ActiveMQ] “EventMessageFile”= C:\ WINDOWS \ SYSTEM32 \ NTEventLogAppender.dll “CategoryMessageFile”= C:\ WINDOWS \ SYSTEM32 \ NTEventLogAppender.dll “TypesSupported”= DWORD:00000007 “CategoryCount”= DWORD:00000006

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为这对于serverfault来说更像一个问题,但是:

您的serviceaccount是否有权写入事件日志?