Корневой журнал всех уровней

Мой корневой регистратор ловит все уровни журнала, кроме off. Мой уровень установлен на INFO. Я искал, не изменился ли где-то уровень, но ничего не нашел.

Когда я помещаю регистратор IBatisNet.DataMapper.Commands.DefaultPreparedCommand в DEBUG, журнал создается в текстовом файле SpecificAppender. Но журнал также отображается в консоли, даже если для корня установлено значение INFO.

Это мой код:

<?xml version="1.0" encoding="utf-8" ?>
<!-- This section contains the log4net configuration settings -->
<configuration>
<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,     log4net" />
</configSections>
<log4net>
    <!-- Define some output appenders -->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <param name="File" value="d:/logs/vol/vol.log" />
        <param name="AppendToFile" value="true" />
        <param name="MaxSizeRollBackups" value="3" />
        <param name="MaximumFileSize" value="500KB" />
        <param name="RollingStyle" value="Size" />
        <param name="StaticLogFileName" value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%d{HH:mm:ss,fff} [%t] %-5p %c{1} - %m%n" />
        </layout>
    </appender>

    <appender name="IBatisAppender" type="log4net.Appender.RollingFileAppender">
        <param name="File" value="d:/logs/vol/IBatis.log" />
        <param name="AppendToFile" value="true" />
        <param name="MaxSizeRollBackups" value="3" />
        <param name="MaximumFileSize" value="1000KB" />
        <param name="RollingStyle" value="Size" />
        <param name="StaticLogFileName" value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%d{HH:mm:ss,fff} [%t] %-5p %c{1} - %m%n" />
        </layout>
    </appender>

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%d{HH:mm:ss,fff} [%t] %-5p %c{1} - %m%n" />
        </layout>
    </appender>

    <appender name="IBatisBufferingAppender" type="log4net.Appender.BufferingForwardingAppender" >
        <bufferSize value="60"/>
        <appender-ref ref="IBatisAppender" />
    </appender>

    <appender name="LogBufferingAppender" type="log4net.Appender.BufferingForwardingAppender" >
        <bufferSize value="60"/>
        <appender-ref ref="RollingLogFileAppender" />
    </appender>

    <appender name="SpecificAppender" type="log4net.Appender.RollingFileAppender">
        <file value="d:/logs/vol/" />
        <appendToFile value="true"/>
        <datePattern value="Volu\me\trieSpeci\fic_yyyy-MM-dd.lo\g"/>
        <rollingStyle value="Date"/>
        <maxSizeRollBackups value="30"/>
        <appendToFile value="true"/>
        <staticLogFileName value="false"/>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%d{HH:mm:SS,fff} [%t] %-5p %c{1} - %m%n" />
        </layout>
        <filter type="log4net.Filter.StringMatchFilter">
            <stringToMatch value="No -->"/>
            <acceptOnMatch value ="true" />
        </filter>
        <filter type="log4net.Filter.StringMatchFilter">
            <stringToMatch value="Statement Id: [vol.Delete"/>
            <acceptOnMatch value ="false" />
        </filter>
        <filter type="log4net.Filter.StringMatchFilter">
            <stringToMatch value="] Types: ["/>
            <acceptOnMatch value ="false" />
        </filter>
        <filter type="log4net.Filter.StringMatchFilter">
            <stringToMatch value="Statement Id: [vol."/>
            <acceptOnMatch value ="true" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter"/>
    </appender>

    <root>
        <level value="INFO" />
        <appender-ref ref="ConsoleAppender" />
        <appender-ref ref="LogBufferingAppender" />
    </root>

    <logger name="PROGvolBatch.Services.CIService">
        <level value="INFO" />
        <appender-ref ref="SpecificAppender"/>
    </logger>

    <logger name="IBatisNet.DataMapper.Commands.DefaultPreparedCommand">
        <level value="DEBUG" />
        <appender-ref ref="SpecificAppender"/>
    </logger>

    <logger name="IBatisNet.DataMapper.Configuration.Cache.CacheModel">
        <level value="OFF" />
        <appender-ref ref="IBatisBufferingAppender" />
    </logger>
    <logger name="IBatisNet.DataMapper.LazyLoadList">
        <level value="OFF" />
        <appender-ref ref="IBatisBufferingAppender" />
    </logger>
    <logger name="IBatisNet.DataMapper.SqlMapSession">
        <level value="OFF" />
        <appender-ref ref="IBatisBufferingAppender" />
    </logger>
    <logger name="IBatisNet.Common.Transaction.TransactionScope">
        <level value="OFF" />
        <appender-ref ref="IBatisBufferingAppender" />
    </logger>
    <logger name="IBatisNet.DataAccess.DaoSession">
        <level value="OFF" />
        <appender-ref ref="IBatisBufferingAppender" />
    </logger>
    <logger name="IBatisNet.DataAccess.Configuration.DaoProxy">
        <level value="OFF" />
        <appender-ref ref="IBatisBufferingAppender" />
    </logger>
    <logger name="IBatisNet.DataMapper.Configuration.Statements.PreparedStatementFactory">
        <level value="OFF" />
        <appender-ref ref="IBatisBufferingAppender" />
    </logger>
    <logger name="IBatisNet.DataMapper.Commands.IPreparedCommand">
        <level value="OFF" />
        <appender-ref ref="IBatisBufferingAppender" />
    </logger>
</log4net>

I tried changing the level of the root to something else, but I always got the same result.


person Community    schedule 30.08.2013    source источник
comment
В чем проблема? Пожалуйста, четко сформулируйте, что вам нужно и что происходит.   -  person htxryan    schedule 30.08.2013
comment
Когда я помещаю регистратор IBatisNet.DataMapper.Commands.DefaultPreparedCommand в DEBUG, журнал создается в текстовом файле с помощью SpecificAppender. Но журнал также отображается в консоли, даже если корень установлен в INFO.   -  person    schedule 31.08.2013


Ответы (1)


Похоже, так работает log4net. Когда ваш файл конфигурации обрабатывается, он ведет себя так, как если бы он был настроен следующим образом:

<logger name="IBatisNet.DataMapper.Commands.DefaultPreparedCommand" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="SpecificAppender"/>
    <appender-ref ref="ConsoleAppender" />
    <appender-ref ref="LogBufferingAppender" />
</logger>

К счастью, есть обходной путь: установить фильтр уровня для ваших приложений, например. для ConsoleAppender:

 <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d{HH:mm:ss,fff} [%t] %-5p %c{1} - %m%n" />
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="INFO" />
    <acceptOnMatch value="true" />
  </filter>    
</appender>

Также может быть лучше переименовать приложение во что-то более описательное, например InfoConsoleAppender. Кроме того, если вы хотите иметь возможность регистрировать некоторые регистраторы для консоли на уровне отладки, вам может понадобиться еще один нефильтрованный файл ConsoleAppender.

person sgmoore    schedule 31.08.2013