在log4net中以编程方式更改日志级别?

Oma*_*eji 17 c# log4net

有没有办法以编程方式在log4net中设置日志级别?我假设有一个属性可以让你这样做,但我似乎找不到一个.

我想要做的是有一个可配置选项进入调试模式.这会导致额外的记录.

我正在使用单独的log4net配置xml文件.目前我提出的解决方案如下:

  1. 使用dom编辑日志文件,然后调用XMLConfigurator根据文件配置日志文件.

  2. 有两个日志配置文件,并在选项更改调用xml Configurator上使用相应的日志配置文件.

我倾向于2,有什么理由不行吗?

Edd*_*die 26

您可以以编程方式更改log4net记录器的日志记录级别,但是如何执行此操作并不明显.我有一些代码可以做到这一点.鉴于此记录器:

private readonly log4net.ILog mylogger;
Run Code Online (Sandbox Code Playgroud)

您必须执行以下花哨的步法将其设置为Debug:

((log4net.Repository.Hierarchy.Logger)mylogger.Logger).Level = log4net.Core.Level.Debug;
Run Code Online (Sandbox Code Playgroud)

  • 更改记录器(或根记录器)的级别比更改特定appender的级别要好得多.+1我做了类似的事情,但将它抽象为RuntimeLoggingHelper.SetLoggerLevel(Type(或字符串名称重载),Level). (4认同)

Mil*_*use 7

这是我以编程方式配置log4net的方式:

//declared as a class variable   
private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

 PatternLayout layout = new PatternLayout(@"%date %-5level %message%newline");
    RollingFileAppender appender = new RollingFileAppender();
    appender.Layout = layout;
    appender.File = "c:\log.txt";
    appender.AppendToFile = true;
    appender.MaximumFileSize = "1MB";
    appender.MaxSizeRollBackups = 0; //no backup files
    appender.Threshold = Level.Error;
    appender.ActivateOptions();                       
    log4net.Config.BasicConfigurator.Configure(appender);
Run Code Online (Sandbox Code Playgroud)

我认为Appender的Threshold属性是你要找的,它将控制appender输出的日志记录级别.

log4net 手册有很多很好的配置示例.