1

私のルートロガーは、を除くすべてのレベルのログをキャッチします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>

ルートのレベルを別のものに変更してみましたが、いつも同じ結果になりました。

4

1 に答える 1

0

これが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. また、いくつかのロガーをデバッグ レベルでコンソールに記録できるようにしたい場合は、別の un-filtered が必要になる場合がありますConsoleAppender

于 2013-08-31T10:15:24.353 に答える