想实现保留7天(一周)内的日志,网上一堆下述代码

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <!--日志路径-->
    <param name="File" type="log4net.Util.PatternString" value="%Log\%date{yyyMMdd}.log" />
    <!--是否是向文件中追加日志-->
    <param name="AppendToFile" value="true" />
    <!--log保留天数-->!!! 此注释是错的
    <param name="MaxSizeRollBackups" value="10" />
    <!--日志文件名是否是固定不变的-->
    <param name="StaticLogFileName" value="false" />
    <!--日志文件名格式为:2019-11-14.log-->
    <param name="DatePattern" value="yyyy-MM-dd".log"" />
    <!--日志根据日期滚动-->
    <param name="RollingStyle" value="Date" />
    <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n %loggername" />
    </layout>
</appender>

 

上面注释 <!--log保留天数-->

 

后来搜索到本文参考1中的问题,才明白在参考3官网说明里,早已经很明确的提示了

 Caution

A maximum number of backup files when rolling on date/time boundaries is not supported.

根本就没有这种配置!!不支持在日期/时间滚动时设置备份文件的最大数量。

 

参考1中的回答还是有几个靠谱的方案,比如自己实现,写一个函数检查日志超过了10天就删除。比如设置 datePattern value="_dd'.log'"

我目前按照 <param name= "DatePattern" value= "dddd&quot;log.txt&quot;"/>

 

 

 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    </configSections>

    <log4net>

        <root>
            <level value="ALL" />
            <appender-ref ref="InfoAppender" />
            <appender-ref ref="WarnAppender" />
            <appender-ref ref="ErrorAppender" />
            <appender-ref ref="FatalAppender" />
            <appender-ref ref="DebugAppender" />
        </root>
        <!-- 输出模式定义 -->
        <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
            <!--日志路径: 兼容相对路径和绝对路径,此语句等价于<File value="Logs\"/> -->
            <param name= "File" value= "Logs\"/>
            <!--是否是向文件中追加日志-->
            <param name= "AppendToFile" value= "true"/>
            <!--保留天数-->
            <param name= "MaxSizeRollBackups" value= "-1"/>
            <!--日志文件名是否固定不变的-->
            <param name= "StaticLogFileName" value= "false"/>
            <!--日志文件名格式为:2017-01-12_Info.log-->
            <param name= "DatePattern" value= "yyyy-MM-dd"_Info.log""/>
            <!--日志根据日期滚动-->
            <param name= "RollingStyle" value= "Date"/>
            <!-- 写入记录文件时的格式%p应该指模式如WARN,%m应该指Message值,%n应该是换行的意思。接着输出Exception -->
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-8p %m%n" />
            </layout>
            <!-- 此模式输出的级别范围 -->       <!-- FATAL > ERROR > WARN > INFO > DEBUG --> 
            <filter type="log4net.Filter.LevelRangeFilter">
                <levelMin value="INFO" />
                <levelMax value="INFO" />
            </filter>
        </appender>

        <appender name="WarnAppender" type="log4net.Appender.RollingFileAppender">
            <File value= "Logs\"/>
            <param name= "AppendToFile" value= "true"/>
            <param name= "MaxSizeRollBackups" value= "10"/>
            <!-- 能保存的文件最大值,假设某次输出后该文件如mm_warn.log的大小将会超过最大值3KB,则此次输出仍有效,但是下次输出则会将该文件重命名为mm_warn.log.1,且生成一个新的mm_warn.log文件以供记录输出内容。 -->
            <param name="MaximumFileSize" value="3KB" />
            <param name= "StaticLogFileName" value= "false"/>
            <param name= "DatePattern" value= "yyyy-MM-dd"_Warn.log""/>
            <param name= "RollingStyle" value= "Composite"/>
            <!-- 写入记录文件时的格式 -->
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-8p %m%n" />
            </layout>
            <!-- 此模式输出的级别范围 -->
            <filter type="log4net.Filter.LevelRangeFilter">
                <levelMin value="WARN" />
                <levelMax value="WARN" />
            </filter>
        </appender>

        <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
            <param name= "File" value= "Logs\"/>
            <param name= "AppendToFile" value= "true"/>
            <param name= "MaxSizeRollBackups" value= "10"/>
            <!-- 能保存的文件最大值 -->
            <param name="MaximumFileSize" value="1MB" />
            <param name= "StaticLogFileName" value= "false"/>
            <param name= "DatePattern" value= "yyyy-MM-dd"_Error.log""/>
            <param name= "RollingStyle" value= "Date"/>
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-8p %m%n" />
            </layout>
            <!-- 此模式输出的级别范围 -->
            <filter type="log4net.Filter.LevelRangeFilter">
                <levelMin value="ERROR" />
                <levelMax value="ERROR" />
            </filter>
        </appender>

        <appender name="FatalAppender" type="log4net.Appender.RollingFileAppender">
            <param name= "File" value= "Logs\"/>
            <param name= "AppendToFile" value= "true"/>
            <param name= "MaxSizeRollBackups" value= "10"/>
            <param name= "StaticLogFileName" value= "false"/>
            <param name= "DatePattern" value= "yyyy-MM-dd"_Fatal.log""/>
            <param name= "RollingStyle" value= "Date"/>
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-8p %m%n" />
            </layout>
            <!-- 此模式输出的级别范围 -->
            <filter type="log4net.Filter.LevelRangeFilter">
                <levelMin value="FATAL" />
                <levelMax value="FATAL" />
            </filter>
        </appender>

        <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
            <param name= "File" value= "Logs\"/>
            <param name= "AppendToFile" value= "true"/>
            <param name= "MaxSizeRollBackups" value= "10"/>
            <param name= "StaticLogFileName" value= "false"/>
            <param name= "DatePattern" value= "yyyy-MM-dd"_Debug.log""/>
            <param name= "RollingStyle" value= "Date"/>
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-8p %m%n" />
            </layout>
            <!-- 此模式输出的级别范围 -->
            <filter type="log4net.Filter.LevelRangeFilter">
                <levelMin value="DEBUG" />
                <levelMax value="DEBUG" />
            </filter>
        </appender>

    </log4net>
</configuration>