我正在尝试使用 NLog 将新应用程序的事件记录到文件和事件日志中。我快到了,但还不够——我可以将事件记录到事件日志中,并且在(事件日志的)详细信息/XML 视图中,一切看起来都正常。但是在查看器的常规选项卡中,我没有按预期显示事件消息;相反,我得到“DRGImporterError”;这个匹配恰好是我的 EventLogMessages.mc 文件中的 SymbolicName(见下文),但是当我修改这个值并重新编译错误消息文件时,这并没有改变。事件日志源和应用程序名称一样是“DRGImporter”,所以我不能确定“DRGImporterError”到底指的是什么!
我手动创建并编辑了存储 EventMessageFile 位置的注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\MyAppLog\DRGImporter
. 最初,我将此键指向我的自定义 EventLogMessages.dll,但在尝试调试它时,我还将它设置为 下的标准 DLL 之一\Windows\Microsoft.NET\...
,但它并没有改变结果。
我有许多其他应用程序使用相同的事件日志,但它们使用不同的日志框架。尽管如此,它们仍然有效,但更奇怪的是,如果我将 NLog 指向的源更改为这些较旧的源之一,则 NLog 条目会成功记录,并且事件日志中的 General 视图会显示预期的文本。我可以从 XML 视图中看到的唯一区别是 EventRecordID 和时间戳,这是意料之中的。
我还缺少这个等式的另一个元素吗?
EventLogMessages.mc:
;//***********Event Definitions**************
MessageId=2000
SymbolicName=MailerError
Language=English
%1.
.
MessageId=2100
SymbolicName=DRGImporterError
Language=English
%1.
.
NLog.config:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true" autoReload="true" internalLogFile="nlog.log" internalLogLevel="Debug">
<targets>
<target name="eventLogHeaderTarget" xsi:type="EventLog" log="Hexadex" source="DRGImporter" eventId="0" layout="${message}" />
</targets>
<rules>
<logger name="appLogHeader" minlevel="Debug" writeTo="eventLogHeaderTarget" />
</rules>