Reputation: 888
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
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