我正在使用 NServiceBus 4.6 和 Serilog。我已经将 NServiceBus 配置为通过以下方式使用 Serilog:
global::NServiceBus.SetLoggingLibrary.Custom(new SeriLoggerFactory());
工厂本身也很简单:
public class SeriLoggerFactory : ILoggerFactory
{
public ILog GetLogger(Type type)
{
return new SeriLoggerAdapter(Log.ForContext(type));
}
public ILog GetLogger(string name)
{
var contextLogger = Log.ForContext("SourceContext", name);
return new SeriLoggerAdapter(contextLogger);
}
}
我肯定会收到与 NServiceBus 相关的日志条目,但缺少的一件事是处理消息但引发异常时的异常详细信息。我可以在 NServiceBus 消息头中看到异常信息(直接通过查看错误队列中的消息或通过 Service Insight),但 NServiceBus 记录的消息缺少最相关的信息:
ID 为“0d255d19-85f9-4915-a27c-a41000da12ed”的消息 FLR 失败,将移交给 SLR 进行重试尝试 1
或者
SLR 未能解决消息 0d255d19-85f9-4915-a27c-a41000da12ed 的问题,并将被转发到 MYERRORQUEUE 的错误队列
没有关于根异常的任何详细信息会使调试有点困难。它需要开发人员打开 Service Insight,或者打开一个工具来查看队列本身中的消息。两者都很麻烦,并且都缺乏任何可扩展性。
例如,Serilog 允许您创建 ILogEventEnricher 类,这些类可以记录有关异常的特殊详细信息 - 异常的简单 .ToString 未记录的内容。如果没有 NServiceBus 实际记录我的异常,我就无法提取这些详细信息。
我在这里想念什么?