<configuration> <appender> 0以上 <layout> 0以上 <filter> 0以上 <logger> 0以上 <appender-ref> 0以上 <root> 1 <appender-ref> 0以上
logger
| name | 必須。 |
|---|---|
| level | 任意。大文字小文字区別なし。TRACE or DEBUG or INFO or WARN or ERROR or ALL or OFF。その他、INHERITED or NULL |
| aditivity | 任意。true or false |
root
ルートロガーの設定。
| level | 任意。デフォルトはDEBUG。大文字小文字区別なし。TRACE or DEBUG or INFO or WARN or ERROR or ALL or OFF(INHERITED or NULLは設定付加) |
|---|
loggerとroot要素のExample
appender-ref
| ref | 必須。Appender要素で定義したname属性を記述することで参照できる。 |
|---|
Chapter3 Sample2
以下のように出力すると、chapterパッケージ以下はINFOレベルとなる。
<logger name="chapter3" level="INFO"/>
Chapter3 Sample3
複数指定することも可能。
<logger name="chapter3" level="INFO" />
<logger name="chapter3.Foo" level="DEBUG" />
この例で、chapter2.MyAppクラスのレベルはどうなるかというと、設定されていないので設定値はnullになるが、実際にはchapter3パッケージのINFOを継承する。
basic-selection ruleに詳しいルールが書かれている。
Chapter3 Sample4
rootにOFFを設定した場合。chapterパッケージにINFOが設定されているので、chapterパッケージ以下はすべてINFOになる。
<logger name="chapter3" level="INFO" />
<!-- turn OFF all logging (children can override) -->
<root level="OFF">
<appender-ref ref="STDOUT" />
</root>
appender
| name | 必須。Appenderの名前を自由に定義する。STDOUTとかFILEとかが一般的。 |
|---|---|
| class | 必須。Appenderのクラスを記述する。「ch.qos.logback.core.ConsoleAppender」とか「ch.qos.logback.core.FileAppender」など。Javadocを見るとメールを投げるものとかもある。 |
filter
| class | Filterクラスを指定する。 |
|---|
layout
| class | 「ch.qos.logback.classic.PatternLayout」など、layoutクラスを指定する。 |
|---|
複数のAppenderに出力する場合の設定
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myApp.log</file>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</Pattern>
</layout>
</appender>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%msg%n</Pattern>
</layout>
</appender>
<root>
<level value="debug" />
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
Loggerが同じAppenderを参照する場合
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<logger name="chapter3">
<appender-ref ref="STDOUT" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
Loggerが異なるAppenderを参照する場合
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myApp.log</file>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</Pattern>
</layout>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%msg%n</Pattern>
</layout>
</appender>
<logger name="chapter3">
<appender-ref ref="FILE" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
Overriding the default cumulative behaviour
簡単に言うと親階層の継承を拒否する設定みたい。
例えば、以下のように設定する。
<logger name="com.daipresents.logging.logback.first"> <appender-ref ref="FILE1" /> </logger> <logger name="com.daipresents.logging.logback.first.second" additivity="false"> <appender-ref ref="FILE2" /> </logger> <root> <level value="debug" /> <appender-ref ref="STDOUT" /> </root>
こうすると、
- firstパッケージのクラスはFILE1とrootのSTDOUTにログを出す
- secondパッケージのクラスはFILE2だけにログを出す
になる。つまり、「additivity=false」でrootの設定を無視することになる。
以下の設定でも試してみた。
逆に、親でadditivityをfalseにしたら子はどうなるか?
<logger name="com.daipresents.logging.logback.first" additivity="false"> <appender-ref ref="FILE1" /> </logger> <logger name="com.daipresents.logging.logback.first.second" additivity="true"> <appender-ref ref="FILE2" /> </logger> <root> <level value="debug" /> <appender-ref ref="STDOUT" /> </root>
この場合は、
- firstパッケージ、secondパッケージのクラスはSTDOUTにはログを出さない
- firstパッケージのクラスはFILE1にログを出す
- secondパッケージのクラスはFILE1とFILE2にログを出す
となった。親パッケージで「additivity=false」を設定されてしまうと、子でがんばってもどうにもならんらしい。