10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Java]SLF4J&LogbackでLogging

Posted at

SLF4J&LogbackでLogging

前提

今のプロジェクトではサーバーサイドはJava(Tomcat)で書いています。
LoggingはSLF4J&Logbackを使っています。

ここを参考にlogback.xmlつくってます。
コピペで始めるSLF4J & Logback

あとはこの辺も参考にしています。
SLF4J+Logback 運用編
SLF4J+LOGBackでログレベル別に出力先を切り分けることは出来るの?

ログレベル

TRACE < DEBUG < INFO < WARN < ERROR

Logbackのタグ説明

appendar

出力のルールを記述する。このタグを書いただけでは、実際にログ出力は行われない。

logger

特定のパッケージ、クラス、識別名をどの出力ルールで出力するのかを記述する。

  • additivity="false"を使うと、指定level以上はappender-ref出力ルールでのみ出力される。
  • additivity="true"を使うと、rootタグの出力ルールでも出力される。

root

loggerで指定されていないものをどの出力ルールで出力するのかを記述する。

turboFilter

マーカーによって動作を変えることができる(らしい)。

Logbackを環境ごとに分ける

環境ごとにlogback.xmlを作成して、build時に適切な環境のlogback.xmlをパッケージングするようにしています。

config
 L logback.develop.xml
 L logback.stage.xml
 L logback.release.xml
build.xml
<property name="mode" value="develop" />
<property name="classesdir" value="class" />
<property name="configdir" value="config" />
<target name="copy">
    <copy overwrite="true" tofile="${classesdir}/logback.xml" file="${configdir}/logback.${mode}.xml"/>
</target>

その他

例外オブジェクトを渡すとトレースが出力される

try {
    // HOGE;
} catch (Exception e) {
    logger.error(e.getMessage(), e);
}

debugは出力されなくても処理はされる

LEVEL=info以上を出力するようにしても、debugの処理は行われる。
で、以下のような処理は無駄なコストを払うことになるので注意。

logger.debug("HOGE:" + hoge.toString());    // 文字連結の処理が無駄になる

こういうのはisDebugEnabledで処理させないように書いておくのが吉。

if (logger.isDebugEnabled()) {
    logger.debug("HOGE:" + hoge.toString());
}
10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?