我们使用带有 AdoNetAppender 的 log4net 将关键日志写入数据库。由于 AdoNetAppender 是 BufferedAppender 的子类,因此有可能启用日志事件排队。 我想做的是保存备份并将日志缓冲区恢复到本地文件,这样即使数据库关闭或应用程序崩溃,也不会丢失任何日志条目。
有人知道怎么做吗?
最佳答案
不要以为自己不写一些代码就可以保存缓冲区。我宁愿建议将日志发送到 AdoNetAppender 和 RollingFileAppender。第一个将确保您定期将日志记录到数据库,而第二个将确保最新的日志也写入磁盘。
更新:根据您后来的评论,我可以看出记录到两个不同来源(一个数据库和一个本地存储,文件或本地数据库)如何变得难以整合。
Imo,您绝对应该使用 log4net,因为它最擅长的是:一个久经考验的真实框架,用于从应用程序收集日志数据并将该数据路由到接收系统。虽然在 log4net 之上构建故障转移系统并不是它的设计目的。例如,没有流程模型可以在应用程序崩溃后收拾残局。
相反,在接收系统中处理故障转移。数据库级别和网络级别的故障转移让你走得很远,但你仍然不能保证 100% 的正常运行时间。通过登录到本地存储,然后让一个进程获取日志并将其传送到数据库,可以最大限度地降低日志数据丢失的风险,同时您可以避免合并来自两个不同存储的日志。更好的是,日志记录仍然简单快速,因此对应用程序的影响很小。
另一种方法是记录到本地数据库,然后让数据库作业将数据拉入主数据库。您也可以使用排队。有 a sample MsmqAppender在那里让你开始。如果您使用的是 MS SQL Server,您甚至可以使用 the Service Broker因为它的排队能力。
关于c# - log4net 从 BufferedAppender 保存缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2363551/