Log4Net的AdoNetAppender - 截断表 / 删除旧记录 / 限制数据库大小

3
有什么简单的方法可以有效地限制Log4Net日志表格的大小?
比如删除旧记录,或在总记录数达到预定限制时删除,或者在表格(或数据库)大小达到限制时进行删除。
(编辑)鉴于我们的客户有标记为MySQL / MSSQL的两种类型的数据库,一个单点解决方案从维护角度来看更好。
我们考虑使用一些代码(与NHibernate一起),定期执行@samy建议的操作。但是,性能有效的Log4Net解决方案总是更好的。
1个回答

4
我假设你要完全从log4net中完成这个操作;如果不是的话,可以选择以下方法之一:
  • 使用cron任务,在所需的时间间隔内删除早于x天的数据
  • 使用触发器来响应log4net插入新数据时的操作
这些方法比下面的方法更加简洁。由于AdoNetAppender允许您指定命令文本,因此您可以设置第二个AdoNetAppender,该Appender将与原始appender一起被触发。然后,该第二个appender可以删除您不再需要的数据:
CommandText="DELETE FROM Logs WHERE [date] < DATEADD(Hour,
-6, GETDATE())"

我认为日志框架不应该处理数据库维护,建议让MySQL来处理。

感谢@samy,我确实希望得到一个Log4Net解决方案,最好是Log4Net本身已经实现的东西或者可以添加到其appender中的扩展。问题已经编辑过了。 - Pingi
1
@Pingi,你可以使用CommandText属性,正如所指出的那样。虽然我在建议的解决方案之间加了免责声明,但你可以从appender中调用删除操作。如果你需要同时访问两个数据库,请设置两个appenders,每个都将删除一个数据库。 - samy
让数据库处理其维护的缺点是需要在两个不同的环境中维护两个单独的脚本,这也更难在CVS中维护。 - Pingi
在某种程度上,log4net中设置维护也需要很多请求,只是它们在配置文件中。无论如何,你设置了log4net的附加器吗?它是否按预期工作? - samy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接