26

我将 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

4 回答 4

16

我们使用以下内容(在 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文件

于 2008-10-28T14:49:15.490 回答
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或类似的东西。

于 2008-10-28T14:48:47.737 回答
2

尝试将此属性设置为 true:

保留日志文件名扩展值 =“真”

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

于 2013-07-19T18:02:58.920 回答
0

请注意,在这种情况下

            <maxSizeRollBackups value="10"/>

将被忽略。

请参阅类似 log4net 问题的答案

于 2008-10-28T16:00:48.200 回答