Skip to content

Commit 2a0ecf8

Browse files
committed
Merge pull request serilog#9 from skomis-mm/master
Live reloading for LoggingLevelSwitch
2 parents 9827088 + 8408741 commit 2a0ecf8

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-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: 16 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,18 @@ 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+
loggerConfiguration.MinimumLevel.ControlledBy(levelSwitch);
112+
113+
ChangeToken.OnChange(
114+
() => minimumLevelDirective.GetReloadToken(),
115+
() =>
116+
{
117+
if (Enum.TryParse(minimumLevelDirective.Value, out minimumLevel))
118+
levelSwitch.MinimumLevel = minimumLevel;
119+
else
120+
SelfLog.WriteLine($"The value {minimumLevelDirective.Value} is not a valid Serilog level.");
121+
});
107122
}
108123
}
109124

0 commit comments

Comments
 (0)