不以管理员身份运行时,log4net不记录到事件日志

时间:2016-03-02 10:30:43

标签: logging log4net event-log 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>

1 个答案:

答案 0 :(得分:3)

尝试以管理员身份运行您的exe,然后正常尝试,它可能会有效。

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

因为您没有在EventLogAppender中设置 ApplicationName ,所以事件源将基于app.exe或app.vshost.exe程序的名称,具体取决于您是否是从外面或内部跑。

因此,如果您以管理员身份运行一次exe,那么它将能够创建事件源,从那时起,即使在非管理员模式下运行,您也应该能够写入事件日志。

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