强制log4net日志级别

本文关键字:日志 log4net 强制 | 更新日期: 2023-09-27 18:17:20

原来我的一个同事在源代码中禁用了日志级别检查:

private static void Log(string source, EnumLogType logType, string msg)
    {
        ....
        switch (logType)
        {
            case EnumLogType.ERROR:
                //if (log.IsErrorEnabled) { log.Error(logMsg); }
                log.Error(logMsg);
                break;
            case EnumLogType.WARNING:
                //if (log.IsWarnEnabled) { log.Warn(logMsg); }
                log.Warn(logMsg); 
                break;
            case EnumLogType.INFO:
                //if (log.IsInfoEnabled) { log.Info(logMsg); }
                log.Info(logMsg); 
                break;
            case EnumLogType.VERBOSE:
                //if (log.IsDebugEnabled) { log.Debug(logMsg); }
                log.Debug(logMsg); 
                break;
            default:
                log.Debug(logMsg);
                break;
        }
    }

所以我们的产品现在正在写调试日志,即使配置文件中的级别被设置为ERROR。

是否有办法强制log4net只记录错误消息?换句话说,我可以通过配置log4net来强制检查日志级别,而不需要编辑和重新编译源代码吗?

强制log4net日志级别

你的同事只禁用了你自己的EnumLogType级别设置。
log4net日志级别应该仍然可以工作。

在你的AppName.Exe.config或Web. config中。配置,使用如下:

<log4net>
    ...
    <logger name="...">
      ...
      <level value="Error" />
    </logger>
</log4net>

你使用什么追加器?如果它是一个DatabaseAppender,你可以尝试修改sql命令文本。

或者您可以编辑log4net。配置文件,使用过滤器部分,只对某些日志级别应用某些追加程序。

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="{LogName}" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyyMMdd" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date] [%level] [%thread] [%logger] [%P{userLoginName}] [%P{HostName}] [%P{IPAddress}] [%P{methodName}] [%message] [%exception]%newline" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="INFO" />
      <levelMax value="WARN" />
    </filter>
  </appender>