我使用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>
答案 0 :(得分:3)
尝试以管理员身份运行您的exe,然后正常尝试,它可能会有效。
您需要创建一个EventSource的管理员权限,但不能写入事件日志。
因为您没有在EventLogAppender中设置 ApplicationName ,所以事件源将基于app.exe或app.vshost.exe程序的名称,具体取决于您是否是从外面或内部跑。
因此,如果您以管理员身份运行一次exe,那么它将能够创建事件源,从那时起,即使在非管理员模式下运行,您也应该能够写入事件日志。
如果您的程序将在其他计算机上运行,则可能需要在安装过程中创建事件源。