Как утилизировать ILogger Scope, созданный Dependency Injection - PullRequest
0 голосов
/ 01 мая 2019

Я определил область действия регистратора в классе DI

var serviceProvider = serviceCollection.BuildServiceProvider();
var logger =  serviceProvider.GetService<ILogger<Processor>>();

logger.BeginScope(new Dictionary<string, object>
{
    {"system", "MyApplication"},
    {"invocation_id", Guid.NewGuid()}
});

Регистратор используется следующим образом (работает нормально)

public class Processor : IProcessor
{
    private readonly ILogger<Processor> logger;

    public Processor(ILogger<Processor> logger)
    {
        this.logger = logger;
    }

    public void LogMessage()
    {
        logger.LogInformation(""Hello World");
        //Dispose Logger
    }
}

Как мне один раз избавиться от этого регистраторазавершено

1 Ответ

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

BeginScope возвращает IDisposable, который закрывает область ведения журнала.Обычно я бы заключил свою операцию в оператор использования.

var serviceProvider = serviceCollection.BuildServiceProvider();
var logger =  serviceProvider.GetService<ILogger<Processor>>();

using (logger.BeginScope(new Dictionary<string, object>
{
    {"system", "MyApplication"},
    {"invocation_id", Guid.NewGuid()}
})) 
{
    IProcessor processor = new Processor(logger);
    ... do your thing
}

Это похоже на рекомендации из https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2#log-scopes

...