log4net能做到“可靠”吗?从外部到表面异常
本文关键字:从外部 表面 异常 可靠 log4net | 更新日期: 2023-09-27 18:10:01
我有一个c#应用程序目前使用log4net,其中一个新的需求要求用户活动必须被记录,如果日志没有发生,应用程序必须停止。开箱即用,log4net是"不可靠的",不会出现运行时异常。可以在不更改源代码的情况下覆盖它吗?
根据文档(和这个相关的问题),log4net不会也不应该显示异常:
。Log4net不可靠。这是一种尽最大努力的故障停止日志记录系统。
通过fail-stop,我们的意思是log4net不会抛出意外的错误运行时的异常可能导致应用程序崩溃。如果出于某种原因,log4net会抛出一个未捕获的异常(除了ArgumentException和ArgumentNullException(可能会被抛出),请发邮件到log4net-user@logging.apache.org邮箱列表。未捕获的异常作为需要处理的严重错误处理立即注意。
此外,log4net将不会恢复到System.Console.Out或指定的输出流未打开时,出现System.Console.Error错误。不可写或已满。这避免了破坏一个else由于日志记录失败,使工作程序充斥用户终端。但是,log4net将向System.Console.Error输出一条消息和System.Diagnostics.Trace指示不能进行日志记录执行。
是否可以配置或包装log4net,以保证如果发生异常,它将在运行时出现?
不,您不能,log4net保证写入日志消息。因此,您的需求中的用户活动日志不能由log4net记录。当您考虑更改log4net源代码以删除此内容时,请不要开始。在很多地方,异常可能会消失,因此创建一个新的日志系统要可靠得多。只要在你想要的地方直接写日志消息,因为你的需求,你永远不会使用log4net在过滤/不同的appenters/日志级别等方面给你的功能。