在Windows服务停止之前,log4.net不会写入

时间:2015-07-14 21:25:39

标签: c# windows-services log4net

我在Windows服务中使用log4.net进行日志记录。 这是我的配置;

 <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="MyApp.log" />
    <appendToFile value="true" />
    <bufferSize value="1" />
    <maximumFileSize value="100000KB" />
    <maxSizeRollBackups value="5" />
    <rollingStyle value="Size" />
    <immediateFlush value="true" />
</appender>

由于某种原因,在我停止服务之前它不会写入文件。是否有某种缓冲正在发生?一旦我停止服务,所有挂起的日志都会被写入。

会出现什么问题?

2 个答案:

答案 0 :(得分:0)

奇怪,你肯定它真的有效吗?

我的log4net版本(版本1.2.11)需要布局(否则没有记录任何内容),并且没有 BufferSize 属性(但是没有&#39;停止工作)

此外, immediateFlush 应默认为true,因此不需要。

以下适用于我。

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="MyApp.log" />
    <appendToFile value="true" />
    <maximumFileSize value="100000KB" />
    <maxSizeRollBackups value="5" />
    <rollingStyle value="Size" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
    </layout>
</appender>

答案 1 :(得分:0)

我的Windows服务遇到了类似的问题,它只在服务停止时写入日志。

我最初的想法是,这感觉就像某种锁定问题,无论是在.Net代码中还是在文件本身上,并且通过停止Windows服务,它会移除锁定并允许写入完成。

话虽如此,我注意到将Windows服务运行的用户帐户更改为具有更高权限的用户帐户,使其立即更新,而不是仅在服务停止时更新。

我将它从本地系统更改为管理员,它修复了问题。当然,不建议以管理员身份运行,但如果问题与个人资料/权限相关,它至少可以帮助您进行诊断。

我还没有弄清楚这个的根本原因......