log4net - log4net RollingFileAppender 在重新启动应用程序后意外覆盖翻转文件
问题描述
我们有一个具有以下 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
达到 in 大小,数据将写入 2021-07-22_AppName.1.xml,从而覆盖其中包含的现有数据。
我的期望是框架识别这个初始状态,并且 1)附加到主文件,以及 2)选择一个继续翻转序列的文件名(在这种情况下为 4)。
我尝试了什么?
基于这个答案,我尝试了以下
<file type="log4net.Util.PatternString" value="D:\\Logs\\.xml" />
<datePattern value="yyyy-MM-dd'_AppName'" />
也试过一个conversionPattern
like
<file type="log4net.Util.PatternString">
<conversionPattern value="D:\Logs\%date{yyyy-MM-dd}_AppName.xml" />
</file>
但它会在开头和结尾创建带有日期的文件(即2021-07-22_AppName2021-07-22.xml
我已经看过这个问题(我没有多个进程/实例记录到文件中)。
问题
- 我正在尝试做的甚至支持/可能吗?如果是这样,我错过了什么?
- 有没有办法将日期
file.value
添加到文件名的末尾,或者总是在扩展名之前添加到文件名的末尾?
解决方案
推荐阅读
- mediawiki - 来自 MediaWiki 模板的皮肤中的元标记
- tensorflow - Keras Inception V3 预测图像不起作用
- javascript - 使用实时 Firebase 数据库(Web)在无限滚动中获取空错误
- hibernate-search - hibernate search - 6.0 版本是否支持对嵌入式实体的投影?
- excel - 如何使用表中不同行的值运行 Excel 宏?
- javascript - 检测 HTML 自定义元素丢失
- python - 如何打开由于日期更改而每天具有不同名称的文件
- nativescript - Nativescript-vue webview 自动播放视频
- python - 使用 python 的 azure cosmos db SQL API 的地理空间数据
- javascript - Mapbox GL JS 重复询问位置