c# - log4net 从 BufferedAppender 保存缓冲区

标签 c# .net logging log4net

我们使用带有 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/

相关文章:

c# - 这将是 IDisposable 的有效基类吗

c# - 为什么我无法访问 T4 模板中类成员中的实用方法?

c# - 如何给ComboBox的SelectedItem和SelectedIValue绑定(bind)不同的属性?

.net - 带有连接和 List<GUID> 的 LINQ

.net - MSMQ:将客户端从 WIndows XP 移动到 Windows 7,ping 问题

c# - .Net SerialPort 在字节可用时占用 0.5 秒来读取字节

.net - 应用程序设置,无需保存到 app.config

java - 调试日志记录不适用于特定处理程序

Azure Function - 如何在类中使用 context.log?

logging - logstash/kibana中的子查询或类似查询?