<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」を設定されてしまうと、子でがんばってもどうにもならんらしい。