具有静态文件名的Log4net配置,但名称中包含日期的存档

时间:2018-01-18 05:30:28

标签: c# log4net log4net-configuration

我想将log4net配置为在" logs"下提供2个不同的活动日志文件(比如说debug.log和error.log)。目录和每日将它们滚动到以date(yyyyMMdd)命名的目录中,并通过将日期添加到其名称来更改文件的名称。 这是我想要的示例目录结构输出:

logs/
logs/debug.log
logs/error.log
logs/20180117/debug.log_20180117
logs/20180117/error.log_20180117
logs/20180116/debug.log_20180116
logs/20180116/error.log_20180116
...

是否可以使用log4net?如果是这样,请分享配置。

1 个答案:

答案 0 :(得分:0)

您需要自定义滚动appender来处理您的独特需求。

首先,您将从RollingFileAppender创建自定义appender,覆盖AdjustFileBeforeAppend()方法,如下所示

public class CustomRollingAppender : RollingFileAppender
{
    DateTime next = DateTime.Today;

    public CustomRollingAppender()
    {
    }

    protected override void AdjustFileBeforeAppend()
    {
        string file = File;
        DateTime newDt = DateTime.Today;
        if (next < newDt)
        {
            next = newDt.AddDays(1);

            string rollDir = Path.Combine(Path.GetDirectoryName(file), DateTime.Today.ToString("yyyyMMdd"));
            Directory.CreateDirectory(rollDir);
            string toFile = Path.Combine(rollDir, String.Format("{0}_{1}", Path.GetFileName(file), DateTime.Today.ToString("yyyyMMdd")));

            this.CloseFile();
            RollFile(file, toFile);
            SafeOpenFile(File, false);
        }
        base.AdjustFileBeforeAppend();
    }
}

最后在app.config中配置它,如下所示

    <appender name="FileAppender" type="Log4NetTest1.CustomRollingAppender">
        <file value="logs/error.log" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
        </layout>
        <preserveLogFileNameExtension value="true" />
    </appender>

PS:未进行100%测试,请在将其投入PROD之前进行彻底测试。

希望它有所帮助。