我想将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?如果是这样,请分享配置。
答案 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之前进行彻底测试。
希望它有所帮助。