O'Neil Tomlinson
O'Neil Tomlinson

Reputation: 888

How to dispose ILogger Scope created by Dependency Injection

I have have defined a logger Scope in the DI class

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

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

The Logger is used like this (works fine)

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

How do i dispose of this logger once completed?

Upvotes: 0

Views: 2274

Answers (1)

Nisd
Nisd

Reputation: 1133

BeginScope returns an IDisposable, that closes the logging scope. Normally I would wrap my operation inside the a using statement.

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
}

This is similar to the recommendations from https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2#log-scopes

Upvotes: 1

Related Questions