用于关键日志记录的 log4net

log4net for crucial logging

我们的客户有一个我们必须调用的 Web 服务,他们要求我们将所有流量记录到该 Web 服务。也就是说,我们必须记录对服务的调用的输入和输出,并且所有日志条目都可用是非常重要的。 log4net 适合这种关键的日志记录吗?例如,我们体验过 log4net 的一个特性,如果我们正在登录数据库,并且连接丢失,默认情况下不会重新建立。 此外,据我所知,log4net 默认是异步的,这意味着即使日志操作失败,也存在丢失某些日志项或通知用户调用顺利的风险。 大家有什么意见吗?

作为 log4net FAQ states:

Is log4net a reliable logging system?

No. log4net is not reliable. It is a best-effort and fail-stop logging system.

这意味着 log4net 将尽最大努力完成日志记录操作,但如果由于任何原因失败,log4net 将不会中断托管应用程序:

log4net will not revert to System.Console.Out or System.Console.Error when its designated output stream is not opened, is not writable or becomes full. … However, log4net will output a single message to System.Console.Error and System.Diagnostics.Trace indicating that logging can not be performed

根据 Web 服务客户端内置的技术,它可能包括消息跟踪功能(如 WCF 跟踪 can be enabled in the client),或者您可能必须自己在客户端中构建一些东西才能执行此操作。

但是,如果记录消息至关重要,请不要依赖 log4net。