当不是 运行 管理员时,log4net 不记录到事件日志

log4net not logging to eventlog when not run as administrator

我使用 log4net 记录文本文件和 Windows 事件日志。当我在 Visual Studio 中使用 F5 运行 调试方法时,两者都工作正常。但是,一旦我直接 运行 exe,它就不会再记录到事件日志中。没有错误被抛出,文本文件日志记录仍然工作正常。

现在我发现问题是,当直接运行时,VS总是以管理员身份启动但exe文件不是。从我所看到的情况来看,当 log4net 由于缺少权限而无法登录到事件日志时至少有一个例外,但在我的情况下不是。就好像没有日志语句一样。

有没有办法在不以管理员身份启动的情况下让 log4net 记录到事件日志?

配置:

<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender,log4net">
  <file value="c:\mylogfile.txt" />
  <appendToFile value="true" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="INFO" />
    <levelMax value="FATAL" />
  </filter>
</appender>

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="ERROR" />
    <levelMax value="FATAL" />
  </filter>
</appender>

<root>
  <level value="ALL" />
  <appender-ref ref="FileAppender" />
  <appender-ref ref="EventLogAppender" />
</root>

尝试运行以管理员身份运行您的 exe 一次,然后正常尝试,它可能会工作。

您需要管理员权限才能创建 EventSource,但不能写入事件日志。

因为您没有在 EventLogAppender 中设置 ApplicationName,事件源将基于程序名称 app.exe 或 app.vshost.exe取决于你是运行宁从外还是内 VS.

所以,如果你 运行 你的 exe 曾经作为管理员,它将能够创建事件源,从那时起,你应该能够写入事件日志,即使 运行在非管理员模式下。

如果您的程序要 运行 在其他计算机上,您可能需要在安装过程中创建事件源。