下面的ILog是否可以与Azure函数、日志记录或Serilog等一起使用?
我找不到关于如何使用它的代码示例。
Rebus.Logging.ILog
.Options(o =>
{
o.Decorate<IErrorHandler>(c =>
new ErrorMessageHandler(c.Get<IErrorHandler>(), c.Get<ILog>()));发布于 2019-05-31 11:09:15
这当然是可能的--但由于Rebus的记录器是用类型创建的(该类型作为上下文进行排序--我认为Serilog将其称为“源上下文”),所以不注入记录器,而是注入记录器工厂:
.Options(o =>
{
o.Decorate<IErrorHandler>(c => {
var errorHandler = c.Get<IErrorHandler>();
var loggerFactory = c.Get<IRebusLoggerFactory>();
return new ErrorMessageHandler(errorHandler, loggerFactory));
});
}然后,在ErrorMessageHandler的构造函数中,您可以获得记录器:
public class ErrorMessageHandler : IErrorHandler
{
readonly IErrorHandler errorHandler;
readonly ILog log;
public ErrorMessageHandler(IErrorHandler errorHandler, IRebusLoggerFactory loggerFactory)
{
this.errorHandler = errorHandler;
log = loggerFactory.GetLogger<ErrorMessageHandler>();
}
public async Task HandlePoisonMessage(TransportMessage transportMessage, ITransactionContext transactionContext, Exception exception)
{
// do stuff in here
}
}https://stackoverflow.com/questions/56386410
复制相似问题