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 中的大小,数据将写入 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(我没有多个进程/实例记录到文件)。

问题

  1. 我正在尝试做的事情是否得到支持/可能?如果是这样,我错过了什么?
  2. 有没有办法将日期添加file.value 之前,还是总是将它添加文件名末尾的扩展名之前?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)