2010-01-14 90 views
2

我需要为log4net定义一个appender,以每天获得一个日志文件的方式,但是文件的总数限制为30个,那就是我只想保留那些不会更老的日志30天后,删除旧的。你知道一个log4net appender在日期上滚动,但让我们限制文件的总数?

我试过用RollingFileAppender来做,但似乎是specifying a limit of files to keep is not supported。你知道我可以使用的替代解决方案吗?

+0

你想如何限制?通过压制古代文件?我没有看到这样做的原则... – serhio 2010-01-14 10:09:56

+0

我只想让旧文件被删除。这是一款运行在存储空间有限的移动设备上的应用程序。我不在乎旧的日志文件,但想清除它们自动发生。 – 2010-01-14 10:25:51

+0

log4net每天都会创建新的日志(对于滚动文件扩展器),但我怀疑它可以(也应该)删除它。 – serhio 2010-01-14 10:28:21

回答

2

我花了一些时间寻找到这在几个月前。 v1.2.10不支持根据日期滚动删除较早的日志文件。它位于下一个版本的任务列表中。我采用了源代码并自己添加了这些功能,并且如果他们感兴趣,则将其发布给其他人。问题和补丁可以在https://issues.apache.org/jira/browse/LOG4NET-27找到。

+0

谢谢!我会看看你的补丁。我最终还是自己修改了appender(当然,我将其分类为准确的),但我只需要处理按日期滚动(而不是按日期和大小),所以我并没有考虑将其公开。 – 2010-03-13 20:06:47

1

编写一个C#WinService或在您的应用程序中创建一个BackgroundWorker,它将每天监视一次您的旧日志文件并将其删除。您可以在此范围内使用FileSystemWatcher

或者只是在运行新日志文件的每个应用程序上测试并删除它。

另一种选择是不在本地存储文件,而是通过网络(邮件,远程服务器等)发送文件。

另请参阅重复问题:herehere

1

您可以使用“复合”日志类型吗?更多在这里:http://logging.apache.org/log4net/release/config-examples.html

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
<file value="logfile" /> 
<appendToFile value="true" /> 
<rollingStyle value="Composite" /> 
<datePattern value="yyyyMMdd" /> 
<maxSizeRollBackups value="10" /> 
<maximumFileSize value="1MB" /> 
<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
</layout> 

+0

纠正我,如果我错了,但我认为这将实际上每天创建一个新文件,然后,如果日志超过1MB它将创建另一个具有相同日期的日志文件,当日期的日期数超过10将删除它们。它不会限制日志的总数,尽管(按日期)。 – 2010-01-18 10:19:38

相关问题