We are using Serilog to log items into a db with a Windows service, and the users wanted to be able to do a manual run, so we made a button (on a web page) to make a call to the
This question is a couple of years old, but I happen to be facing a similar problem right now.
The easiest way to turn Serilog's logging off is by creating a new logger without any sinks. From Serilog's documentation, Configuration Basics:
Log.Logger = new LoggerConfiguration().CreateLogger();
Log.Information("No one listens to me!");
The solution above is not correct. After some more research, I've found that this can be done by setting a filter when configuring the logger:
Log.Logger = new LoggerConfiguration()
.Filter.ByExcluding(_ => !IsLoggingEnabled)
.WriteTo.MSSqlServer(...)
.CreateLogger();
, where IsLoggingEnabled
is just a boolean flag.
Log levels can be modified at runtime with LoggingLevelSwitch
:
var ls = new LoggingLevelSwitch();
Log.Logger = new LoggerConfiguration()
.MinimumLevel.ControlledBy(ls)
.WriteTo.MSSqlServer(...)
.CreateLogger();
Logging will initially be at the Information
level, you can change this via the switch.
Serilog doesn't define an Off
level, but you can approximate it with:
ls.MinimumLevel = ((LogEventLevel) 1 + (int) LogEventLevel.Fatal);
...to turn logging off.