问题描述
我们有一个具有以下 log4net 配置 (v 2.0.12) 的应用程序:
<appender name="LogFileAppenderXML" type="log4net.Appender.RollingFileAppender">
<file value="D:\Logs\" />
<datePattern value="yyyy-MM-dd'_AppName.xml'" />
<preserveLogFileNameExtension value="true" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="30" />
<maximumFileSize value="500KB" /> <-- in production this value is much larger; 500KB produces rolled-over files faster when reproducing this behavior
<staticLogFileName value="false" />
<layout type="log4net.Layout.XmlLayout"/>
</appender>
这意味着我们要按日期(天)和按大小(即 rollingStyle=Composite
)滚动。我们还希望将主动记录的日志文件的文件名保留为固定 (staticLogFileName
),以便我们可以使用查看器 (Log4View) 打开文件。在应用程序的单次运行中,一切都按预期工作。但是如果我重新启动应用程序,已经滚动的文件将被覆盖。
假设目标目录中已经存在以下文件:
- 2021-07-22_AppName.xml
- 2021-07-22_AppName.1.xml
- 2021-07-22_AppName.2.xml
- 2021-07-22_AppName.3.xml
如果我启动应用程序,新的日志条目将正确附加到主文件 2021-07-22_AppName.xml
。但是,一旦达到 maximumFileSize
中的大小,数据将写入 2021-07-22_AppName.1.xml,从而覆盖其中包含的现有数据。
我的期望是框架识别此初始状态并 1) 附加到主文件,以及 2) 选择一个继续翻转序列的文件名(在本例中为 4)。
我尝试了什么?
基于this answer,我尝试了以下
<file type="log4net.Util.PatternString" value="D:\\Logs\\.xml" />
<datePattern value="yyyy-MM-dd'_AppName'" />
也试过 conversionPattern
喜欢
<file type="log4net.Util.PatternString">
<conversionPattern value="D:\Logs\%date{yyyy-MM-dd}_AppName.xml" />
</file>
但它创建的文件的开头和结尾都带有日期(即 2021-07-22_AppName2021-07-22.xml
我已经看过 this question(我没有多个进程/实例记录到文件)。
问题
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)