Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Changing .NET Minimum Log Level programmatically

Using Microsoft.Extensions.Logging, let be the log initialization (F#):

let myLogger = 
    LoggerFactory
        .Create(fun builder -> 
            builder
                .AddSimpleConsole()
                .SetMinimumLevel(myLevel) 
                |> ignore)
        .CreateLogger()

How do we change that minimum level later, on demand?

I am looking to something as simple as:

myLogger.ChangeMinimumLevelTo(newLevel)
like image 756
Franco Tiveron Avatar asked Jun 18 '26 10:06

Franco Tiveron


1 Answers

For anyone else needing this solution, but in C#, this is @Franco Tiveron's solution translated:

void changeMinimumLevel(ILogger logger, LogLevel level)
        {
            var _logger = logger
                    .GetType()
                    .GetField("_logger", BindingFlags.NonPublic | BindingFlags.Instance)
                    .GetValue(logger);
            var loggersArray =
                (Array)_logger
                    .GetType()
                    .GetProperty("MessageLoggers")
                    .GetValue(_logger);


            var enu = loggersArray.GetEnumerator();
            var i = 0;
            while (enu.MoveNext())
            {
                var x = enu.Current;
                var piMinLevel = x.GetType().GetProperty("MinLevel");
                var fiMinLevel = piMinLevel.GetBackingField();
                fiMinLevel.SetValue(x, level);
                loggersArray.SetValue(x, i);
                i++;
            }
        }
like image 161
Paul Avatar answered Jun 20 '26 00:06

Paul



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!