Allows to change the log level at runtime.
It is usefull for pinpointing issues in production environments by changing to lower log level like Debug
temporarily (for example via GUI or Web API) without restarting the application.
There are 2 projects/nuget packages:
- Use
Thinktecture.Extensions.Logging.Configuration
in case you are usingMicrosoft.Extensions.Logging.ILogger
- Use
Thinktecture.Extensions.Serilog.Configuration
withSerilog.ILogger
The steps for setting up the configuration for ILogger
from Microsoft and Serilog are almost identical.
Install-Package Thinktecture.Extensions.Logging.Configuration
Create an instance of ILoggingConfiguration
// You can register this instance (i.e. ILoggingConfiguration) with DI
// and, for example, control the logging level via GUI or Web API
var loggingConfig = new LoggingConfiguration();
Add the logging configuration to your IConfigurationBuilder
using extension method AddLoggingConfiguration
.
This call must be placed after other configuration providers that change the log level, e.g. as the last one.
var config = new ConfigurationBuilder()
// Adding JsonFile just to provide some defaults
.AddJsonFile("appsettings.json", false, true)
// The following line is the only one that's new.
// The path to the logging config is "My:Logging" in this example
.AddLoggingConfiguration(loggingConfig, "My", "Logging")
.Build();
== appsettings.json =============================================
"My": {
"Logging": {
...
}
}
Use the IConfiguration
to configure the logger the usual way.
var serviceProvider = new ServiceCollection()
.AddLogging(builder =>
{
// Nothing new, provide IConfiguration the usual way
builder.AddConfiguration(config.GetSection("My:Logging"));
builder.AddConsole();
})
.BuildServiceProvider();
Use ILoggingConfiguration
to set and reset the log level.
ILoggingConfiguration loggingConfig = ...;
//Changing log level of category=Thinktecture and provider=all to Warning
loggingConfig.SetLevel(LogLevel.Warning, "Thinktecture");
// Changing log level of category=all and provider=Console to Error
loggingConfig.SetLevel(LogLevel.Error, null, "Console");
// Changing log level of category=Thinktecture and provider=Console to Critical
loggingConfig.SetLevel(LogLevel.Critical, "Thinktecture", "Console");
// Resetting all settings, returning to defaults
loggingConfig.ResetLevel();
Install-Package Thinktecture.Extensions.Serilog.Configuration
Create an instance of ISerilogConfiguration
// You can register this instance (i.e. ISerilogConfiguration) with DI
// and, for example, control the logging level via GUI or Web API
var loggingConfig = new SerilogConfiguration();
Add the logging configuration to your IConfigurationBuilder
using extension method AddLoggingConfiguration
.
This call must be placed after other configuration providers that change the log level, e.g. as the last one.
Limitation: Serilog creates a watcher (i.e. a
LoggingLevelSwitch
) for configuration keys only that are present when building the logger. For example: if there is no configuration forMinimumLevel:Override:Thinktecture
when CreateLogger() is called then you won't be able to change the log level for this category during runtime.
var config = new ConfigurationBuilder()
// Adding JsonFile to provide defaults.
.AddJsonFile("appsettings.json", false, true)
// The following line is the only one that's new.
// The path to the logging config is "My:Serilog" in this example
.AddLoggingConfiguration(loggingConfig, "My", "Serilog")
.Build();
== appsettings.json =============================================
"My": {
"Serilog": {
...
}
}
Use the IConfiguration
to configure Serilog according to Serilog.Settings.Configuration
var loggerConfiguration = new LoggerConfiguration()
.ReadFrom.ConfigurationSection(config.GetSection("My:Serilog"))
.WriteTo.Console();
Use ISerilogConfiguration
to set and reset log level.
ISerilogConfiguration serilogConfig = ...;
// Changing log level of category=all to Information
serilogConfig.SetLevel(LogEventLevel.Information);
// Changing log level of category=Thinktecture to Debug
serilogConfig.SetLevel(LogEventLevel.Debug, "Thinktecture");
Resetting all settings, returning to defaults
serilogConfig.ResetLevel();