Serilog.Settings.Reloader 2.0.9.3

Feature to completely reload serilog settings. Also contains switchable ILogger implementation.

Install-Package Serilog.Settings.Reloader -Version 2.0.9.3
dotnet add package Serilog.Settings.Reloader --version 2.0.9.3
<PackageReference Include="Serilog.Settings.Reloader" Version="2.0.9.3" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Serilog.Settings.Reloader --version 2.0.9.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Serilog.Settings.Reloader, 2.0.9.3"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Serilog.Settings.Reloader as a Cake Addin
#addin nuget:?package=Serilog.Settings.Reloader&version=2.0.9.3

// Install Serilog.Settings.Reloader as a Cake Tool
#tool nuget:?package=Serilog.Settings.Reloader&version=2.0.9.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Serilog.Settings.Reloader provides reloadable settings for Serilog.

SwitchableLogger is assigned with new root ILogger when configuration is modified.

// Assign SwitchableLogger.Instance to Serilog.Log.Logger
Serilog.Log.Logger = SwitchableLogger.Instance;

// Assign logger to SwitchableLogger.Instance
SwitchableLogger.Instance.Logger = new Serilog.LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3} {SourceContext}] {Message:lj}{NewLine}{Exception}")
    .CreateLogger();

// Create logger
ILogger logger = Serilog.Log.ForContext<Program>();

// Write
logger.Information("Hello World");

// Reconfigure 
ILogger newLogger = new Serilog.LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Console(outputTemplate: "[{SourceContext}] {Message:lj}{NewLine}{Exception}")
    .CreateLogger();
// Assign new logger
SwitchableLogger.Instance.Set(newLogger, disposePrev: true);

// Write with the previous logger instance, but with different settings
logger.Information("Hello world again");

.AddSerilogConfigurationLoader() can be used with dependency injection's ILoggingBuilder.

// Read configuration
IConfigurationRoot configuration = new ConfigurationBuilder()
    Add(config)
    .Build();

// Service collection
IServiceCollection serviceCollection = new ServiceCollection()
    .AddLogging(loggingBuilder =>
        loggingBuilder
            .AddSerilog(SwitchableLogger.Instance, true)
            .AddSerilogConfigurationLoader(configuration, SwitchableLogger.Instance)
        );

// Services
using (var services = serviceCollection.BuildServiceProvider())
{
    // Create logger
    Microsoft.Extensions.Logging.ILogger logger = services.GetService<Microsoft.Extensions.Logging.ILogger<Program>>();

    // Write
    logger.LogInformation("Hello World");

    // Modify config
    config.Set("Serilog:WriteTo:0:Args:OutputTemplate", "[{SourceContext}] {Message:lj}{NewLine}{Exception}");
    configuration.Reload();

    // Write with the previous logger instance, but with different settings
    logger.LogInformation("Hello world again");
}

.AddSerilogConfigurationLoader(IConfiguration, SwitchableLogger, Func<IConfiguration, ILogger>) third argument specifies load function.

loggingBuilder
    .AddSerilog(SwitchableLogger.Instance, true)
    .AddSerilogConfigurationLoader(configuration, SwitchableLogger.Instance, 
        c => new Serilog.LoggerConfiguration().ReadFrom.Configuration(c).CreateLogger())
    );

Serilog.Settings.Reloader provides reloadable settings for Serilog.

SwitchableLogger is assigned with new root ILogger when configuration is modified.

// Assign SwitchableLogger.Instance to Serilog.Log.Logger
Serilog.Log.Logger = SwitchableLogger.Instance;

// Assign logger to SwitchableLogger.Instance
SwitchableLogger.Instance.Logger = new Serilog.LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3} {SourceContext}] {Message:lj}{NewLine}{Exception}")
    .CreateLogger();

// Create logger
ILogger logger = Serilog.Log.ForContext<Program>();

// Write
logger.Information("Hello World");

// Reconfigure 
ILogger newLogger = new Serilog.LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Console(outputTemplate: "[{SourceContext}] {Message:lj}{NewLine}{Exception}")
    .CreateLogger();
// Assign new logger
SwitchableLogger.Instance.Set(newLogger, disposePrev: true);

// Write with the previous logger instance, but with different settings
logger.Information("Hello world again");

.AddSerilogConfigurationLoader() can be used with dependency injection's ILoggingBuilder.

// Read configuration
IConfigurationRoot configuration = new ConfigurationBuilder()
    Add(config)
    .Build();

// Service collection
IServiceCollection serviceCollection = new ServiceCollection()
    .AddLogging(loggingBuilder =>
        loggingBuilder
            .AddSerilog(SwitchableLogger.Instance, true)
            .AddSerilogConfigurationLoader(configuration, SwitchableLogger.Instance)
        );

// Services
using (var services = serviceCollection.BuildServiceProvider())
{
    // Create logger
    Microsoft.Extensions.Logging.ILogger logger = services.GetService<Microsoft.Extensions.Logging.ILogger<Program>>();

    // Write
    logger.LogInformation("Hello World");

    // Modify config
    config.Set("Serilog:WriteTo:0:Args:OutputTemplate", "[{SourceContext}] {Message:lj}{NewLine}{Exception}");
    configuration.Reload();

    // Write with the previous logger instance, but with different settings
    logger.LogInformation("Hello world again");
}

.AddSerilogConfigurationLoader(IConfiguration, SwitchableLogger, Func<IConfiguration, ILogger>) third argument specifies load function.

loggingBuilder
    .AddSerilog(SwitchableLogger.Instance, true)
    .AddSerilogConfigurationLoader(configuration, SwitchableLogger.Instance, 
        c => new Serilog.LoggerConfiguration().ReadFrom.Configuration(c).CreateLogger())
    );

  • .NETStandard 2.0

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Serilog.Settings.Reloader:

Package Downloads
YYApp.Serilog
YYApp Serilog common and defaults
HwApp.Serilog
HwApp Serilog common and defaults

GitHub repositories

This package is not used by any popular GitHub repositories.

Version History

Version Downloads Last updated
2.0.9.3 63,554 12/10/2019
2.0.9.2 197 12/9/2019
2.0.9.1 196 12/9/2019
2.0.9 226 12/7/2019