过滤以不记录特定类

时间:2015-06-10 07:18:58

标签: log4net log4net-configuration log4net-filter

我有一个adonet appender和滚动文件appender配置为我的应用程序。我想要的是我的adonetappender上的过滤器,通过它我可以省略特定类的登录。该类具有多个级别的devugging,我需要为我的文件appender。所以我无法改变等级,必须省略过滤器。 我的日志配置在下面给出

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

我的班级名称是MyNameSpace.Business.ConditionCompare 在我的类中,log4net对象被声明为

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

1 个答案:

答案 0 :(得分:1)

您不在配置中显示文件追加器,但您需要做的是定义一个记录器,它通过指定additivity="false"来覆盖root中定义的追加器:这允许记录器选择要使用的追加器。正如您所说,您希望完全停止记录到数据库,您可以告诉记录器只使用文件追加器:

修改:在root元素下添加:

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