Я пытаюсь использовать NTEventLogAppender Log4J для регистрации сообщений уровня ERROR в журнале событий Windows «Application» для существующей установки ActiveMQ 5.4.2, работающей как служба на Windows Server 2008, SP2 32bit (в нашей производственной среде программное обеспечение для мониторинга серверов , Solar Windows, хранит вкладки в журналах событий Windows и собирает определенную информацию, записанную в них). Я получил 32-битный NTEventLogAppender.dll и скопировал его в c: \ windows \ system32.
Я хорошо знаком с Log4J, но не с приложением NTEventLogAppender.
Если я запускаю ActiveMQ в окне консоли (работая как «Администратор» или нет), все в порядке. Однако, если я запускаю ActiveMQ как службу (например, «net start activemq»), оболочка службы запускается, но сам ActiveMQ срывается (из-за вызовов NTEventLogAppender в Log4J). Комментирование соответствующих строк NTEventLogAppender в log4j.properties решает проблему.
Похоже на проблему с разрешениями Server 2008 для ActiveMQ / NTEventLogAppender, когда он работает как служба, а не как приложение переднего плана с моими привилегиями. Если где-то в ОС записана информация о проблеме, я еще не нашел ее.
Кстати, я изначально написал небольшое консольное приложение «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.layattern.Connect d | % -5p | % m | % c | % t% n log4j.appender.NTEVENT.threshold = ОШИБКА
Кроме того, этот ключ в настоящее время существует в реестре:
[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \ Application \ ActiveMQ] «EventMessageFile» = C: \ Windows \ System32 \ NTEventLogAppender.dll «CategoryMessageFile» = C: \ Windows \ System32 \ NTEventLogAppender.dll «TypesSupported0007» = 0000 "CategoryCount" = dword: 00000006
Любые идеи?