2

首先,让我感谢 log4cplus 源代码。

我面临一个问题如下:

我想做什么?我想将消息记录到 Windows 上的事件日志中。

我做了什么?我可以通过包含以下 .h 来启用事件日志记录

          #include <log4cplus/nteventlogappender.h>

并按如下方式创建附加程序:

          SharedAppenderPtr append_3(new NTEventLogAppender(LOG4CPLUS_TEXT("127.0.0.1"), LOG4CPLUS_TEXT("log"), LOG4CPLUS_TEXT("source")));
          append_3->setName(LOG4CPLUS_TEXT("ToEventlog"));

          Logger to_eventlog = Logger::getInstance(LOG4CPLUS_TEXT("to_eventlog"));
          to_eventlog.addAppender(append_3);
          to_eventlog.setLogLevel(log4cplus::ALL_LOG_LEVEL);

并记录为

         Logger to_eventlog = Logger::getInstance(LOG4CPLUS_TEXT("to_eventlog"));
         LOG4CPLUS_FATAL(to_eventlog, “Test Message.”);

当我记录消息时,我在事件日志中得到以下信息:


找不到来自源的事件 ID 4096 的描述。引发此事件的组件未安装在本地计算机上,或者安装已损坏。您可以在本地计算机上安装或修复组件。

如果事件起源于另一台计算机,则显示信息必须与事件一起保存。

活动中包含以下信息:

测试消息。

消息资源存在,但在字符串/消息表中找不到消息


我尝试创建一个名为 NTEventLogAppender.dll 的 dll,其中包含字符串表资源和 id 为 4096 的字符串(在 log4cplus 中的 nteventlogappender.cxx 文件中硬编码),并使用仅资源 dll (/NOENTRY) 对其进行编译,但我仍然不断超越错误。

我已经尝试向 log4cplus-devel@lists.sourceforge.net 提问,但还没有得到任何答案。

任何有关如何创建此 dll 的帮助将不胜感激。

谢谢。

4

1 回答 1

1

这就是我解决此问题的方法:

使用命令编译 NTEventLogAppender.mc 文件:

mc -U NTEventLogAppender.mc
rc -r NTEventLogAppender.rc
link -dll -noentry -out:NTEventLogAppender.dll NTEventLogAppender.res

其中 NTEventLogAppender.mc 具有以下内容


MessageIdTypedef=DWORD

SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS
Informational=0x1:STATUS_SEVERITY_INFORMATIONAL
Warning=0x2:STATUS_SEVERITY_WARNING
Error=0x3:STATUS_SEVERITY_ERROR
)


FacilityNames=(System=0x0:FACILITY_SYSTEM
Runtime=0x2:FACILITY_RUNTIME
Stubs=0x3:FACILITY_STUBS
Io=0x4:FACILITY_IO_ERROR_CODE
)

LanguageNames=(English=0x409:MSG00409)

; // The following are message definitions.

MessageId=0x1000
SymbolicName=SVC_TEST
Language=English
A message for something.
.

; // A message file must end with a period on its own line
; // followed by a blank line.

将 NTEventLogAppender.dll 复制到 c:\windows\system32 并运行上述测试程序,发现事件日志正确找到了消息资源。

您需要通过在 .reg 文件中复制以下内容并运行相同的内容来注册此 dll

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\log\source]
"EventMessageFile"="C:\\windows\\system32\\NTEventLogAppender.dll"
"CategoryMessageFile"="C:\\windows\\system32\\NTEventLogAppender.dll"
"TypesSupported"=dword:00000007
"CategoryCount"=dword:00000005

于 2011-08-04T20:45:30.917 回答