【问题标题】:Log4Net AdoNetAppender- truncate table / delete old records / limit DB sizeLog4Net AdoNetAppender- 截断表/删除旧记录/限制数据库大小
【发布时间】:2015-04-01 08:53:18
【问题描述】:

有效限制 Log4Net 登录的表大小的简单方法是什么?

比如删除旧记录, 或在记录总数达到预定义限制时删除, 或者当表(或数据库)大小达到大小限制时

(编辑) 因为我们有两种类型的标记数据库(MySQL / MSSQL)的客户,所以从维护 POV 来看,单点解决方案会更好。

我们考虑过使用一些代码(使用 NHibernate)来定期执行@samy 建议的操作。但性能有效的 Log4Net 解决方案总是更好。

【问题讨论】:

    标签: c# mysql sql log4net adonetappender


    【解决方案1】:

    我假设你想完全从 log4net 来做;如果你不这样做,那么要么

    • 使用cron task,它将以您希望的时间间隔删除早于 x 天的数据
    • 使用trigger 可以对 log4net 插入的新数据做出反应

    这些方法将比以下方法更简洁。

    由于AdoNetAppender 允许您指定command text,您可以设置第二个AdoNetAppender,它将由日志事件与您的原始附加程序一起触发。然后,第二个附加程序可以删除您不再需要的数据:

    CommandText="DELETE FROM Logs WHERE [date] < DATEADD(Hour,
    -6, GETDATE())"
    

    我认为日志框架不应该处理数据库维护,所以请考虑让 MySQL 来代替。

    【讨论】:

    • 谢谢@samy,我确实希望有一个 Log4Net 解决方案,最好是已经在 Log4Net 本身中实现的东西,或者添加到其 appender 的扩展......问题已编辑。
    • @Pingi 那么您可以使用所指出的 CommandText 属性。确实,我在免责声明之间包装了建议的解决方案 :) 但您可以从附加程序中调用删除。如果您需要同时访问两个数据库,请设置两个附加程序,每个附加程序将删除一个数据库
    • 让数据库处理其维护的缺点是必须在 2 个单独的环境中维护 2 个单独的脚本,这在 CVS 中也更难维护
    • 在某种程度上,在 log4net 中设置维护也需要尽可能多的请求,只是它们在配置文件中。无论如何,您是否在 log4net 中设置了附加程序?它是否按预期工作?
    猜你喜欢
    • 1970-01-01
    • 2020-04-11
    • 2012-10-23
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多