如何处理由依赖注入创建的ILogger Scope

问题描述 投票:0回答:1

我已经在DI类中定义了一个记录器Scope

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

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

Logger就像这样使用(工作正常)

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
    }
}

完成后如何处理此记录器?

c# logging dependency-injection dispose
1个回答
0
投票

BeginScope返回一个IDisposable,它关闭了日志记录范围。通常我会将我的操作包装在using语句中。

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的建议

© www.soinside.com 2019 - 2024. All rights reserved.