如何使用log4net将RollingFileAppender配置为按日期和大小滚动?

时间:2008-10-28 14:40:02

标签: xml configuration log4net composite rollingfileappender

我配置log4net以使用复合RollingFileAppender,以便当前文件始终命名为 logfile.log ,所有后续文件都命名为 logfile -YYYY.MM.dd.seq.log 其中 seq 是日志在一天内超过特定大小的序列号。不幸的是,我在配置这样的设置方面收效甚微。

修改

我的当前配置粘贴在下面。它已根据几个答案进行了更新,使我足够接近我的需求。这将生成以下格式的文件: logfile_YYYY.MM.dd.log.seq

<log4net>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="RollingFileAppender" />
    </root>

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="logs\\logfile"/>
        <staticLogFileName value="false"/>
        <appendToFile value="true"/>
        <rollingStyle value="Composite"/>
        <datePattern value="_yyyy.MM.dd&quot;.log&quot;"/>
        <maxSizeRollBackups value="10"/>
        <maximumFileSize value="75KB"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG" />
            <param name="LevelMax" value="FATAL" />
        </filter>
    </appender>

</log4net>

一个有趣的说明,设置

<staticLogFileName value="false"/>

为true会导致记录器不写任何文件。

4 个答案:

答案 0 :(得分:15)

我们使用以下(在Log4J中):

<appender name="roller" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="Applog.log"/>
    <param name="DatePattern" value="'.'yyyy-MM-dd"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="[slf5s.start]%d{DATE}[slf5s.DATE]%n%p[slf5s.PRIORITY]%n%x[slf5s.NDC]%n%t[slf5s.THREAD]%n%c[slf5s.CATEGORY]%n%l[slf5s.LOCATION]%n%m[slf5s.MESSAGE]%n%n"/>
    </layout>
</appender>

这为我们提供了 Applog.log.yyyy-MM-dd 文件

答案 1 :(得分:4)

根据log4net RollingFileAppender源代码:

protected string GetNextOutputFileName(string fileName)
{
    if (!m_staticLogFileName) 
    {
        fileName = fileName.Trim();

        if (m_rollDate)
        {
            fileName = fileName + m_now.ToString(m_datePattern, System.Globalization.DateTimeFormatInfo.InvariantInfo);
        }

        if (m_countDirection >= 0) 
        {
            fileName = fileName + '.' + m_curSizeRollBackups;
        }
    }

    return fileName;
}

所以我猜这是不可能生成一个具有你需要的名字的日志文件。我认为它类似logfileYYYY-MM-dd.n.log或类似的东西。

答案 2 :(得分:1)

尝试将此属性设置为true:

preserveLogFileNameExtension value =“true”

我相信这个技巧会对你有所帮助!但是,preserveLogFileNameExtension属性需要最新版本的log4net,您可以在此处找到它:logging.apache.org/log4net/download.html

答案 3 :(得分:0)

注意就是这种情况

            <maxSizeRollBackups value="10"/>

将被忽略。

请参阅此answer以查找类似的log4net问题