【发布时间】:2011-10-23 11:16:07
【问题描述】:
我有一个使用 log4net 的 RollingFileAppender 并且可以多次实例化的客户端应用程序。最初我已经将所有日志写入一个文件,但是,我很快意识到 log4net 在写入时会锁定文件,但是,即使我使用less restrictive 写入模式,我仍然会得到很多我的日志文件乱七八糟。
我决定将 process-id 合并到文件名中,如下所示:
<appender name="HumanRollingLog" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="Log\TestLog[%processid].txt"/>
<param name="DatePattern" value="dd.MM.yyyy'.log'"/>
<appendToFile value="true"/>
<rollingStyle value="Size"/>
<staticLogFileName value="true" />
<maxSizeRollBackups value="10"/>
<maximumFileSize value="1KB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%type] [%thread] %-5level %logger - %message%newline%exception%"/>
</layout>
</appender>
那行得通。但是,它完全弄乱了滚动功能,因为现在每个进程都会产生自己的日志文件,实际滚动只会在进程 ID 开始重复之后发生。例如,启动我的应用程序 3 次导致创建以下日志:
TestLog[5396].txt
TestLog[5396].txt.1
TestLog[5396].txt.10
TestLog[5396].txt.2
TestLog[5396].txt.3
TestLog[5396].txt.4
TestLog[5396].txt.5
TestLog[5396].txt.6
TestLog[5396].txt.7
TestLog[5396].txt.8
TestLog[5396].txt.9
TestLog[5976].txt
TestLog[5976].txt.1
TestLog[5976].txt.10
TestLog[5976].txt.2
TestLog[5976].txt.3
TestLog[5976].txt.4
TestLog[5976].txt.5
TestLog[5976].txt.6
TestLog[5976].txt.7
TestLog[5976].txt.8
TestLog[5976].txt.9
TestLog[6860].txt
TestLog[6860].txt.1
TestLog[6860].txt.10
TestLog[6860].txt.2
TestLog[6860].txt.3
TestLog[6860].txt.4
TestLog[6860].txt.5
TestLog[6860].txt.6
TestLog[6860].txt.7
TestLog[6860].txt.8
TestLog[6860].txt.9
有人知道我可以做些什么来解决这个问题吗?我想让每个进程都有自己的文件,但我不能允许在所有进程之间重用滚动。
谢谢!
【问题讨论】: