Skip to content

Commit c0bb766

Browse files
author
Sergey Komisarchik
committed
Live reloading when MinimumLevel changes
1 parent a97cd87 commit c0bb766

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

sample/Sample/Program.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using Microsoft.Extensions.Configuration;
1+
using System;
2+
3+
using Microsoft.Extensions.Configuration;
24
using Serilog;
35
using System.IO;
46

@@ -10,14 +12,18 @@ public static void Main(string[] args)
1012
{
1113
var configuration = new ConfigurationBuilder()
1214
.SetBasePath(Directory.GetCurrentDirectory())
13-
.AddJsonFile("appsettings.json")
15+
.AddJsonFile(path: "appsettings.json", optional: false, reloadOnChange: true)
1416
.Build();
1517

1618
var logger = new LoggerConfiguration()
1719
.ReadFrom.Configuration(configuration)
1820
.CreateLogger();
1921

20-
logger.Information("Hello, world!");
22+
do
23+
{
24+
logger.Information("Hello, world!");
25+
}
26+
while (Console.ReadKey().KeyChar != 'q');
2127
}
2228
}
2329
}

src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
using System.Runtime.CompilerServices;
66
using Microsoft.Extensions.Configuration;
77
using Microsoft.Extensions.DependencyModel;
8+
using Microsoft.Extensions.Primitives;
9+
810
using Serilog.Configuration;
11+
using Serilog.Core;
12+
using Serilog.Debugging;
913
using Serilog.Events;
1014

1115
namespace Serilog.Settings.Configuration
@@ -103,7 +107,23 @@ void ApplyMinimumLevel(LoggerConfiguration loggerConfiguration)
103107
if (!Enum.TryParse(minimumLevelDirective.Value, out minimumLevel))
104108
throw new InvalidOperationException($"The value {minimumLevelDirective.Value} is not a valid Serilog level.");
105109

106-
loggerConfiguration.MinimumLevel.Is(minimumLevel);
110+
var levelSwitch = new LoggingLevelSwitch(minimumLevel);
111+
112+
ChangeToken.OnChange(
113+
() => minimumLevelDirective.GetReloadToken(),
114+
() =>
115+
{
116+
if (Enum.TryParse(minimumLevelDirective.Value, out minimumLevel))
117+
{
118+
levelSwitch.MinimumLevel = minimumLevel;
119+
}
120+
else
121+
{
122+
SelfLog.WriteLine($"The value {minimumLevelDirective.Value} is not a valid Serilog level.");
123+
}
124+
});
125+
126+
loggerConfiguration.MinimumLevel.ControlledBy(levelSwitch);
107127
}
108128
}
109129

0 commit comments

Comments
 (0)