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