首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >log4net +多线程+滚动文件附加器

log4net +多线程+滚动文件附加器
EN

Stack Overflow用户
提问于 2012-04-19 06:22:57
回答 2查看 14.3K关注 0票数 12

我在log4net.config中为log4net设置了以下设置,以允许多个线程写入同一文件:

代码语言:javascript
复制
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
    <!-- Minimal locking to allow multiple threads to write to the same file -->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <file value="log\UI.log"/>
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <maxSizeRollBackups value="30"/>
    <datePattern value="-yyyyMMdd"/>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level [%property{identity}] %logger{3} - %message%newline"/>
    </layout>
</appender>

但是午夜过后,新创建的日志文件会一直被覆盖,因此文件中只有最后一个事件。服务器重启后,一切都会恢复正常,直到下一个午夜。

那么,有没有人能说出这是一个配置问题,还是仅仅是一个log4net问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-28 17:31:12

这个问题通过删除锁定模型键得到了解决,因为我只有一个进程(IIS、w3wp.exe)使用相同的记录器。

代码语言:javascript
复制
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>

因为有人说here

如果您使用RollingFileAppender,情况会变得更糟,因为几个进程可能会尝试同时开始滚动日志文件。RollingFileAppender在滚动文件时完全忽略了锁定模型,因此滚动文件与此场景不兼容。

我认为你会得到不可预知的结果。

票数 10
EN

Stack Overflow用户

发布于 2012-04-19 22:03:59

我的猜测是,您在datePattern上使用-符号会混淆框架,因此在第一次滚动之后,任何日志都会触发滚动事件。

当你尝试这样做的时候会发生什么

代码语言:javascript
复制
<datePattern value="yyyyMMdd" />

根据示例here

要更改滚动周期,请调整DatePattern的值。例如,日期模式"yyyyMMdd“每天都会滚动。有关可用模式的列表,请参阅System.Globalization.DateTimeFormatInfo。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10218962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档