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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/243572/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-06 12:11:29  来源:igfitidea点击:

How do I configure a RollingFileAppender to roll by date and size with log4net?

xmlconfigurationlog4netcompositerollingfileappender

提问by Ryan Taylor

I am configure log4net to use a composite RollingFileAppender so that the current file is always named logfile.logand all subsequent files are named logfile-YYYY.MM.dd.seq.logwhere seqis the sequence number if a log exceeds a certain size within a single day. Unfortunately, I have had very little success in configuring such a setup.

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

Edit:

编辑:

My current configuration is pasted below. It has been updated based on several answers which gets me close enough for my needs. This generates files of the format: logfile_YYYY.MM.dd.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>

One interesting note, setting

一个有趣的笔记,设置

<staticLogFileName value="false"/>

to true causes the logger to not write any files.

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

采纳答案by paul

We use the following (in Log4J):

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

This gives us Applog.log.yyyy-MM-ddfiles

这给了我们Applog.log.yyyy-MM-dd文件

回答by Leandro López

According to log4net RollingFileAppender source code:

根据 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;
}

So I'm guessing it's not possible to generate a log file with the name you need. I think it's something like logfileYYYY-MM-dd.n.logor similar.

所以我猜想用你需要的名字生成日志文件是不可能的。我认为它是类似logfileYYYY-MM-dd.n.log或相似的。

回答by Junrui

Try set this property to true:

尝试将此属性设置为 true:

preserveLogFileNameExtension value="true"

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

I believe this trick will help you! However, preserveLogFileNameExtension property needs the latest version of log4net, you can find it here: logging.apache.org/log4net/download.html

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

回答by Chasler

Note that is this case the

请注意,在这种情况下

            <maxSizeRollBackups value="10"/>

will be ignored.

将被忽略。

See this answerto a similar log4net question

看到这个答案,以类似的log4net的问题