【问题标题】:log4net not logging to eventlog when not run as administrator未以管理员身份运行时,log4net 未记录到事件日志
【发布时间】:2016-03-02 10:30:42
【问题描述】:

我使用 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>

【问题讨论】:

    标签: logging log4net event-log administrator


    【解决方案1】:

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

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

    因为你没有在你的EventLogAppender中设置ApplicationName,所以事件源会根据你是否是app.exe或者app.vshost.exe这个程序的名字来从 VS 外部或内部运行。

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2017-09-23
    • 2011-02-12
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多