3

私はできるようにしたい:

// A logger.
private static final Logger log = LoggerFactory.getLogger(Foo.class);
// Stats logger.
private static final Logger stats = LoggerFactory.getLogger("Stats");

stats( )にログインするたびに、ログ エントリがStats.logstats.info(...)というファイルに移動するようにします。へのロギングは正常に動作するはずです。log

私は(おそらく間違って)で次のものを手に入れましたLogback.xml

A failed config that adds nothing to the question now ... removed.

ロガー名に基づいてアペンダーを選択する方法を教えてくれるものを見つけることができないようです。ログレベルに基づいて選択する方法はたくさんあります。

追加した

これは私が最終的に得た構成です:

<configuration>

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>Log.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>Log-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 1MB -->
        <maxFileSize>1MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      <!-- Check on startup too. -->
      <cleanHistoryOnStart>true</cleanHistoryOnStart>
    </rollingPolicy>

    <encoder>
      <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
    </encoder>
  </appender> 

  <appender name="STATS" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>Stats.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>Stats-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 1MB -->
        <maxFileSize>1MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      <!-- Check on startup too. -->
      <cleanHistoryOnStart>true</cleanHistoryOnStart>
    </rollingPolicy>

    <encoder>
      <pattern>%date %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%level %msg%n</pattern>
    </encoder>
  </appender>

  <root level="debug">
    <appender-ref ref="FILE" />
    <appender-ref ref="STDOUT" />
  </root>

  <logger name="Stats" level="info">
    <appender-ref ref="STATS" />
  </logger>
</configuration>

正常に動作しますが、統計は通常のログ ファイルにも記録されますが、これをフィルターで削除する必要がある場合があります。

4

2 に答える 2

3

STATS Appender を Stats Logger にアタッチし、ルート ロガーから削除する必要があります。

<root level="debug">
    <appender-ref ref="FILE" />
    <appender-ref ref="STDOUT" />
  </root>

<logger name="Stats">
    <appender-ref ref="STATS" />
</logger>

それはそれを行う必要があります。

別のアプローチは、「STATS」アペンダーでフィルターを使用することです。

フィルターは、LoggingEvent ごとに呼び出される 1 つのメソッドを実装し、"yes"、"no"、または "undecided" を返します (チェーン内の次のフィルターを実行します)。

基本的に、統計ロガーからのすべての LoggingEvents に対して「はい」、その他すべてに対して「いいえ」と言うフィルターを「STATS」アペンダーにアタッチする必要があります。

于 2013-08-18T07:07:01.547 に答える
0

ケースの問題ではないかどうかを最初に確認する必要があります: STATS vs Stats ...?

于 2013-08-18T00:18:12.337 に答える