意图:
a)我希望我的日志按照以下文件格式yyyy-MM-dd.txt按日期滚动。
b)除此之外,我想删除超出maxSizeRollBackups范围的旧文件。
CAUTION A maximum number of backup files when rolling on date/time boundaries is not supported. [RollingFileAppender spec][1]
解
对于a)足以进行配置
<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<maxSizeRollBackups value="30" />
<datePattern value="yyyy-MM-dd'.txt'" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.XmlLayoutSchemaLog4j"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>
表示b) RollingFileAppender +删除东西的继承是实现这个目标的唯一方法吗?
答案 0 :(得分:7)
答案 1 :(得分:2)
考虑到十多年过去了并且仍然不支持,我选择了以下具有所需功能的覆盖RollingFileAppender
的解决方案:
public class RollingDateAppender : RollingFileAppender {
public TimeSpan MaxAgeRollBackups { get; set; }
public RollingDateAppender()
: base() {
PreserveLogFileNameExtension = true;
StaticLogFileName = false;
}
protected override void AdjustFileBeforeAppend() {
base.AdjustFileBeforeAppend();
string LogFolder = Path.GetDirectoryName(File);
var CheckTime = DateTime.Now.Subtract(MaxAgeRollBackups);
foreach (string file in Directory.GetFiles(LogFolder, "*.log")) {
if (System.IO.File.GetLastWriteTime(file) < CheckTime)
DeleteFile(file);
}
}
}
配置与原始类一样简单:
roller = new RollingDateAppender {
AppendToFile = true,
File = ...;
MaxAgeRollBackups = TimeSpan.FromDays(7),
RollingStyle = RollingFileAppender.RollingMode.Date,
...
};
roller.ActivateOptions();
BasicConfigurator.Configure(roller);
请注意,只有在使用*.log
或使用PreserveLogFileNameExtension
在文件名末尾包含扩展名时,才能在日志目录中查找DatePattern
文件。如果您需要不同的命名方案,请同步修改它们。
(我使用的是log4net 2.0.8版,早期版本可能不允许覆盖必要的功能。)
答案 2 :(得分:1)
这里提供的RollingFileAppenderer的补丁版本4 https://issues.apache.org/jira/secure/attachment/12565940/RollingFileAppender.zip似乎可以进行微小改动:在第1286行替换&#34;。*&#34;用&#34; *&#34;。
为此,您可以使用以下配置:
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="MyProduct.log" />
<param name="DatePattern" value="'_'yyyy-MM-dd"/>
<param name="AppendToFile" value="true"/>
<param name="RollingStyle" value="Date"/>
<param name="StaticLogFileName" value="false"/>
<param name="MaxDateRollBackups" value="3" />
<param name="preserveLogFileNameExtension" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%r %d [%t] %-5p %c - %m%n"/>
</layout>
</appender>