logback.xmlの配置場所について

バックエンド技術

 

現在ブリッジSEのyoshyです。今回は、社内でいつもお世話になっているKoji NISHIYAMAさんの英語記事を翻訳させていただき、JavaのロギングライブラリであるLogbackの設定ファイル(logback.xml)をTomcatのDocker環境においてをどう配置&適用するかご紹介します。

導入



Eclipse で Java アプリケーションを開発するとき、私は通常、logback.xml を src/main/resources の直下 (クラスパス上) に置きます。しかし、開発環境の以外のステージング環境や本番環境ではどこに配置すればよいでしょうか?

サムネイル

LOGBACK.XML の場所について



ルールはここで確認できます。

Chapter 3: Configuration

以下は英語から日本語に翻訳したものになります。

  1. Logback は、クラスパス内で logback-test.xml というファイルを見つけようとします。
  2. そのようなファイルが見つからない場合、logback はクラスパス内で logback.groovy というファイルを見つけようとします。
  3. そのようなファイルが見つからない場合は、クラスパス内のファイル logback.xml がチェックされます。
  4. そのようなファイルが見つからない場合は、service-provider loading facility(JDK 1.6で導入)が使用されて、com.qos.logback.classic.spi.Configurator インターフェースの実装を解決します。このとき、クラスパス内の META-INF\services\ch.qos.logback.classic.spi.Configurator ファイルを検索し、その中には実装する Configurator の完全修飾クラス名が指定されている必要があります。
  5. 上記のいずれも成功しない場合、Logbackは BasicConfigurator を使用して自動的に構成され、ログ出力がコンソールに送信されます。

開発中では 1 ~ 3 (Eclipse コンソールに出力したり、ファイルに出力したりすること)で十分です。
また、4 を使用することで、ステージング環境や本番環境で logback.xml の場所を設定することができます。

また、クラスパスに logback.xml がある場合でも、VM ランタイム引数として以下のように指定するだけでクラスパスよりも優先されることが確認できます。とても簡単です。

java -Dlogback.configurationFile=/usr/local/tomcat/conf/logback.xml

TOMCATのDockerコンテナに適用する



さて、私は Tomcat のDockerコンテナに war ファイルを配置して実行しようとしていました。ここからはTomcat のDockerコンテナに logback.xml の場所を指定する方法を解説します。

今回使用したDockerイメージは以下です。

https://hub.docker.com/_/tomcat

setenv.sh を使用して VM ランタイム引数を tomcat に設定します。
setenv.sh ファイルを bin ディレクトリに置くと、catalina.sh が自動的にロードしてくれます。
( catalina.sh とは上記の Tomcat コンテナの起動時に実行されるファイルです。)

以下がsetenv.sh の例です。

#!/bin/bash

JAVA_OPTS="-server \
           -Dfile.encoding=UTF-8 \
           -Dlogback.configurationFile=/usr/local/tomcat/conf/logback.xml"


次に、docker run コマンドを使用して、CATALINA_HOME の bin ディレクトリ直下にsetenv.shを配置します。また、合わせてコンテナ内にlogback.xmlとwarも配置しています。

docker run -p 8080:8080 -d \
   -v /path/to/setenv.sh:/usr/local/tomcat/bin/setnev.sh \
   -v /path/to/logback.xml:/usr/local/tomcat/conf/logback.xml \
   -v /path/to/sample.war:/usr/local/tomcat/webapps/sample.war \
   tomcat:8.5-jdk8-corretto

そうすることで、logback.xml ファイルを Tomcat に渡すことができます。

ロードされたLOGBACK.XMLを確認します。


以下はうまく動作しない場合の参考にしてください。

logback.xml の読み込みステータスを確認するには、以下に示すように、logback.xml の設定タグの直下に statusListener タグを追加します。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration>
<configuration>
  <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
  ...
</configuration>

そうすることで、ログが logback.xml の場所を教えてくれます。

14:44:54,034 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
14:44:54,035 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
14:44:54,035 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/user/Develop/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/sample-front/WEB-INF/classes/logback.xml]

詳細については、「Status Listener」を参照してください。



オフショア開発ならCRAID!

オフショア開発とは、システム開発業務などを海外の開発会社や海外子会社に委託することです。

CRAIDは東証プライム上場のフリービット株式会社の子会社です。CRAIDのオフショア開発拠点「フルスピードテクノロジーズ」は、当初は月間3000億ものリクエスト処理にも対応できる自社システム開発を行うためのオフショア開発部門として始まりました。各グループ会社の開発やクライアント様の受託開発やラボ型開発も多く手掛けております。

CRAIDやオフショア開発に関して、お気軽にお問い合わせください。

この記事を書いた人

ブリッジSE

yoshyをフォローする
バックエンド技術環境・プラットフォーム開発技術
CRAID オフショア開発ブログ
タイトルとURLをコピーしました