фильтр, чтобы не регистрировать записи определенного класса

У меня есть приложение Adonet Appender и приложение для роликового файла, настроенное для моего приложения. Я хочу, чтобы в моем приложении adonetappender был установлен фильтр, с помощью которого я могу пропустить ведение журнала для определенного класса. Этот класс имеет несколько уровней разработки, которые мне нужны для моего файлового приложения. поэтому я не могу изменить уровень и должен пропустить через фильтр. Моя конфигурация ведения журнала приведена ниже

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

person Kamran Shahid    schedule 10.06.2015    source источник


Ответы (1)


Вы не показываете свой файловый аппендер в конфигурации, но вам нужно определить регистратор, который переопределяет аппендеры, определенные в корне, указав _ 1_: это позволяет регистратору выбирать, какие приложения использовать. Когда вы говорите, что хотите полностью прекратить регистрацию в базе данных, вы можете указать регистратору просто использовать файл appender:

Изменить: добавьте это прямо под элементом root:

<logger name="MyNameSpace.Business.ConditionCompare" additivity="false">
   <level value="ALL" />
   <appender-ref ref="RollingLogFileAppender" />
</logger>
person stuartd    schedule 10.06.2015
comment
Я отредактировал свою конфигурацию log4net, которая показывает, как она выглядит на самом деле. Не могли бы вы сообщить мне, где мне разместить эту запись регистратора в моей конфигурации? - person Kamran Shahid; 10.06.2015
comment
Измените корневой элемент на ‹root› ‹level value = ALL /› ‹appender-ref ref = RollingLogFileAppender /› ‹appender-ref ref = AdoNetAppender /› ‹logger name = MyNameSpace.Business.ConditionCompare additivity = false› ‹level value = ALL / ›‹ appender-ref ref = RollingLogFileAppender / ›‹/logger› ‹/root› Но это не сработало - person Kamran Shahid; 10.06.2015
comment
помните, я хочу, чтобы Rollingfileappender вел журнал, в то время как adonetappender пропустил ведение журнала для любого журнала в определенном классе MyNameSpace.Business.ConditionCompare - person Kamran Shahid; 10.06.2015
comment
@KamranShahid именно это и делает. - person stuartd; 10.06.2015
comment
Хорошо изменим мою конфигурацию и снова проверим. Я видел, что в файле журнала есть записи, а также моя база данных для записей журнала класса ConditionCompare. После изменения конфигурации я сбрасываю IIS, чтобы изменения вступили в силу. Но еще раз посмотрим, в чем проблема - person Kamran Shahid; 10.06.2015
comment
Но вам нужны записи в файле, а не в БД? Вы должны убедиться, что регистратор, создаваемый System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, имеет точное имя MyNameSpace.Business.ConditionCompare - person stuartd; 10.06.2015
comment
В порядке. Я выйду из системы и проверю, такая же она или другая. Спасибо Стюарт Данкельд - person Kamran Shahid; 10.06.2015
comment
Спасибо, у меня сработало. Просто нужно было за рутом добавить вроде ‹root› ... ‹/root› ‹logger› ... ‹/logger›. Не внутри корня. Может, вы имели это в виду, но мне было непонятно. - person mivra; 23.02.2020
comment
Вы правы, @mivra "под" здесь двусмысленно. Рад, что помог. - person stuartd; 23.02.2020