过滤以不记录特定 class 的日志记录条目

filter to not log logging entries of particular class

我为我的应用程序配置了 adonet 附加程序和滚动文件附加程序。我想要的是我的 adonetappender 上的一个过滤器,通过它我可以忽略特定 class 上的日志记录。 class 具有我的文件附加程序所需的多级调试。所以我不能改变水平,必须通过过滤器省略。 我的日志记录配置如下

<?xml version="1.0" encoding="utf-8" ?>
    <log4net>
       <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender" >
        <file value="..\Logs\Logfile.txt" />
        <appendToFile value="true" />
        <datePattern value="yyyyMMdd" />
        <rollingStyle value="Date" />
        <filter type="log4net.Filter.LevelRangeFilter">
          <acceptOnMatch value="true" />
          <levelMin value="DEBUG" />
          <levelMax value="FATAL" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.fff} %10p %-5property{_App} %-5property{_Node} [%2t] %5c{1}.%M - %m%n" />
        </layout>
      </appender>   
      <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
        <immediateFlush value="true" />
        <bufferSize value="0" />
        <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
        <connectionString value="data source=localhost;initial catalog=logging_db;User ID=root;Password=" />
        <commandText value="INSERT INTO system_log(appname, action, level)
                            VALUES(@appname, @action,@level);" />
        <parameter>
          <parameterName value="appname" />
          <dbType value="String" />
          <size value="32" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="My Web Service" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="action" />
          <dbType value="String" />
          <size value="150" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%c{1}" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="level" />
          <dbType value="String" />
          <size value="10" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%p" />
          </layout>
        </parameter>   
        <filter type="log4net.Filter.LevelRangeFilter">
          <acceptOnMatch value="true" />
          <levelMin value="DEBUG" />
          <levelMax value="FATAL" />
        </filter>
      </appender>
      <root>
        <level value="ALL" />
        <appender-ref ref="RollingLogFileAppender" />       
        <appender-ref ref="AdoNetAppender" />
      </root>    
    </log4net>

我的 class 名字是 MyNameSpace.Business.ConditionCompare 在我的 class log4net 对象中声明为

private static readonly log4net.ILog Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

您没有在配置中显示您的文件附加程序,但您需要做的是定义一个记录器,它通过指定 additivity="false" 覆盖根目录中定义的附加程序:这允许记录器选择哪些附加程序使用。正如您所说,您想要完全停止记录到数据库,您可以告诉记录器只使用文件附加程序:

编辑:在 root 元素下添加:

<logger name="MyNameSpace.Business.ConditionCompare" additivity="false">
   <level value="ALL" />
   <appender-ref ref="RollingLogFileAppender" />
</logger>