Skip to content

Instantly share code, notes, and snippets.

@matthiesenj
Created November 22, 2023 12:20
Show Gist options
  • Save matthiesenj/9b8c239ab467158a886f11776e512a95 to your computer and use it in GitHub Desktop.
Save matthiesenj/9b8c239ab467158a886f11776e512a95 to your computer and use it in GitHub Desktop.
Change logging level of Common.Logging.ILog logger backed by log4net logger, using reflection
// This is just an example - requires error checking
// Due to reflection, it is not necessary to reference the log4net assembly
var iLog = LogManager.GetLogger(typeof(TcpStreamFactory));
var field = iLog.GetType().GetField("_logger", BindingFlags.Instance | BindingFlags.NonPublic);
var log4netlog = field.GetValue(iLog);
var propLogger = log4netlog.GetType().GetProperty("Logger");
var logger = propLogger.GetValue(log4netlog);
var propLevel = logger.GetType().GetProperty("Level");
var origLevel = propLevel.GetValue(logger);
var fieldOff = propLevel.PropertyType.GetField("Off", BindingFlags.Static | BindingFlags.Public);
propLevel.SetValue(logger, fieldOff.GetValue(null));
// do stuff with logger OFF
propLevel.SetValue(logger, origLevel); // restore level
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment