Как использовать Rebus.Logging.ILog - PullRequest
0 голосов
/ 31 мая 2019

Можно ли использовать ILog ниже с регистрацией функций Azure или Serilog и т. Д.?

Я не могу найти пример кода о том, как его использовать.

Rebus.Logging.ILog

  .Options(o =>
    {
    o.Decorate<IErrorHandler>(c => 
       new ErrorMessageHandler(c.Get<IErrorHandler>(), c.Get<ILog>()));

1 Ответ

0 голосов
/ 31 мая 2019

Это, конечно, возможно - но поскольку регистраторы 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
    }
}
...