gpt4 book ai didi

database - 将异常记录到 NServiceBus 中的数据库

转载 作者:搜寻专家 更新时间:2023-10-30 20:21:48 25 4
gpt4 key购买 nike

如果我的 MessageHandler 发生异常,我想将异常详细信息写入我的数据库。我该怎么做?

显然,由于 NSB 回滚所有更改,我不能只捕获异常、写入数据库并重新抛出它。 (IsTransactional 设置为 true)

我尝试在单独的处理程序中添加日志记录功能,如果发生异常,我会使用 SendLocal 对其进行调用,但这不起作用:

public void Handle(MessageItem message)
{
try
{
DoWork();
}
catch(Exception exc)
{
Bus.SendLocal(new ExceptionMessage(exc.Message));
throw;
}
}

我还尝试将 Log4Net 与自定义附加程序一起使用,但这也回滚了。

Configure.With()
.Log4Net<DatabaseAppender>(a => a.Log = "Log")

附加器:

public class DatabaseAppender : log4net.Appender.AppenderSkeleton
{
public string Log { get; set; }

protected override void Append(log4net.Core.LoggingEvent loggingEvent)
{
if (loggingEvent.ExceptionObject != null)
WriteToDatabase(loggingEvent.ExceptionObject);
}
}

当 IsTransactional 为 true 时,是否会在消息处理程序中记录未处理的异常?

提前致谢。

最佳答案

我建议使用配置文件而不是代码来配置 appender。这样,无论谁操作您的软件,都可以决定应该如何记录内容。标准 AdoNetAppender 具有以下配置开关:

<param name="UseTransactions" value="False" />

我认为这会按照您想要的方式工作。如果你真的想使用你自己的附加程序,你可以查看 log4net 源代码他们是如何做到的。他们可能使用 TransactionScope 类和 TransactionScopeOption.Suppress option .

关于database - 将异常记录到 NServiceBus 中的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2929441/

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