【问题标题】:Force log4net logging level强制 log4net 日志记录级别
【发布时间】:2015-10-13 08:14:43
【问题描述】:

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

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通过配置它来检查日志级别,而不需要编辑和重新编译源代码吗?

【问题讨论】:

    标签: c# .net log4net


    【解决方案1】:

    您的同事只禁用了您自己的EnumLogType 级别设置。
    log4net 日志记录级别应该仍然有效。

    在您的 AppName.Exe.config 或 Web.Config 中,使用如下内容:

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

    【讨论】:

    • 是的,事实证明 log4net 没有读取 log4net.config 而是 web.config 中的 &lt;log4net&gt; 部分(尽管我在 AssemblyInfo.cs 中指向 log4net.config)。所以我试图配置错误的文件...
    【解决方案2】:

    您使用什么附加程序?如果是 DatabaseAppender,您可以尝试更改 sql 命令文本。

    或者您可以使用过滤器部分编辑 log4net.config 文件以仅将某些附加程序应用于某些日志级别。

    <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>
    

    【讨论】:

    • 事实证明,log4net 没有读取log4net.config,而是web.config 中的&lt;log4net&gt; 部分(即使我指向AssemblyInfo.cs 中的log4net.config)。所以我试图配置错误的文件...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    相关资源
    最近更新 更多