2014/08/12(火)TOMCAT + logbackで、logback.xmlを外出し
2014/08/12 13:27
logback.xmlをwarの外に追い出そうとしたらプチハマリしたメモ。
環境は、
TOMCAT 7.0.54.0
logback 1.1.2
一応できた。ただし、すっきりとは書けない。
Context定義にVirtualWebappLoaderを追加する。
たとえば、WEB-INF以下にlogback.xmlを置いた場合以下のようになる。
<Context> <Loader className="org.apache.catalina.loader.VirtualWebappLoader" virtualClasspath="C:/foo/bar/WEB-INF" /> <Context/>ここで注意。
必要なのがlogback.xmlだけの場合、ファイル名まで書いてやりたいので次のようにしがち。
virtualClasspath="C:\foo\bar\WEB-INF\logback.xml"しかしこの場合、VirtualWebappLoader側はlogback.xmlを認識するが、logbackがlogback.xmlを読みにいかない模様。
あくまでディレクトリパスを書く必要がある。
絶対パスなのがいまいちな場合、$tomcat.base or $tomcat.homeが使えるのでそれを使ってなんとか相対パスで書く。
(tomcat.home->catalina.homeかもしれないのでRTFM)。
virtualClasspath="${tomcat.home}/webapps/foo/bar/WEB-INF"このどっちもいまいちだと難しい。TOMCATではほかの手が見つからなかった。
アプリケーションサーバを切り替えたほうがいいかもしれない。
アプリケーションルート的な所から相対パスでアクセスしたいという要望はあると思う。
あとはメモ。
virtualClasspathの書き方としては、Windows環境下ではディレクトリ区切り子は"/"でも"\"でもよい。
ディレクトリパス指定時は末尾の区切りはいらない。
Context周りの仕様で怪しいところがあるなら本家ドキュメントで確認。Apache Tomcat 7 Configuration Reference (7.0.55) - The Context Container
Eclipseからプラグイン経由で使う場合、さらにいろいろ留意。
Eclipse+Tomcat Pluginでコンテキスト定義に追加する場合、プロジェクトのプロパティ->Tomcat->全般->その他の情報にLoaderセクションをべたっと貼り付けて、プロジェクト->右クリック->"コンテキスト定義を更新"でよい。
コンテキスト定義をMETA-INF/context.xmlなどで作っていても、現在のEclipseのTomcatプラグインは拾う機能がなさそう。コンテキスト定義更新で%CATALINA_BASE%/conf以下に反映されていないことに注意。META-INF側はconfより優先順位が低く参照されない。
こっから下はおまけ。
動作確認時に%CATALINA_HOME%/conf/logging.propertiesに、ログ出力を追加してTOMCATにログをはかせるようにした。
org.apache.catalina.loader.VirtualWebappLoader.level = ALL org.apache.catalina.loader.VirtualWebappLoader.directory = ${catalina.base}/logsなお、Eclipseから起動したTOMCATはcatalina.*.logとかははかないので注意。
ここら辺は"eclipse, tomcat, ログ"とかで検索してほしい。