gpt4 book ai didi

log4net - 自定义 log4net appender 中的日志记录/错误处理

转载 作者:行者123 更新时间:2023-12-04 18:23:55 25 4
gpt4 key购买 nike

我们有一个内部开发的日志系统,我们希望获得 log4net 的好处,例如能够同时使用多个 appender。我们决定将遗留日志系统移动到自定义 log4net 附加程序中。当遗留系统配置正确时,这很好用,但遗留记录器实际上写入 WCF 客户端(使详细日志记录变慢,这是我们想要使用其他 log4net appender 的原因),而且最近 WCF 配置不太像它本来应该。发生这种情况时,应用程序似乎运行正常,但显然遗留系统的自定义附加程序无法正常工作。其他 appender 工作正常,但自定义遗留 appender 没有输出,也没有错误消息表明存在问题。

处理“递归”日志记录的正确方法是什么,即从自定义 log4net appender 内部进行日志记录?我尝试了一个天真的解决方案:从其静态对象中获取 log4net 并在 appender 中登录:

public class MyCustomAppender : AppenderSkeleton
{

protected override void Append(log4net.Core.LoggingEvent loggingEvent)
{
try
{
// something which throws here...
}
catch (Exception ex)
{
log4net.LogManager.GetLogger(this.GetType()).Error(this.GetType().ToString() + ": error during append", ex);
}
}
}

这是一个严重的失败,“System.Threading.LockRecursionException:在这种模式下不允许递归读取锁获取。”很公平;这是天真的解决方案。

我也试过:
this.ErrorHandler.Error(this.GetType().ToString() + ": error during append", ex);

在异常处理程序中,因为它似乎可能是正确的。没有什么明显的事情发生。

有没有办法通过 appender 内的 log4net 记录错误?或者我是否必须直接将硬编码写入 Windows 事件日志?显然存在无限递归下降的巨大危险,但我认为会有某种方式让运算符(operator)知道其中一个附加程序未能运行。

JR

最佳答案

当然,当我发布这个问题时,我想起了一些事情。 log4net 在 appSettings 中有一个调试开关。我使用了这个代码:

this.ErrorHandler.Error(this.GetType().ToString() + ": error during append", ex);

在 catch 块内,然后将魔法设置设置为:
<appSettings>
<!--this is wonderful magic-->
<add key="log4net.Internal.Debug" value="true" />
</appSettings>

现在 ConsoleAppender(我正在使用的另一个 appender)发出自定义 appender 异常消息。

JR

关于log4net - 自定义 log4net appender 中的日志记录/错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33261138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com