weblogicでlog4j.xmlを上手く読み込んでくれない時の話

( ´_ゝ`)ノシ
yoshitiaです。
今週はずっとAntとweblogic10.3.6使ってました。
javajavaしてます(コーヒーは飲んでいない)。
で、webアプリケーション起動時、
log4j.xmlが読み込まれてくれないorz
その対処のお話です。

2016/3/5 対処法に勘違いがあったので修正。
 

ググると大抵見つかる記事の対処方法

2016/3/4追記
log4jweblogic側で利用する場合と
webアプリケーションが利用する場合で
対処法が違ってたorz
1はwebアプリケーションがlog4jを使っている時の対処、
2がweblogic自身のログ出力でのlog4j設定

1. warファイルのWEB-INF/classesフォルダに
log4j.xmlがあれば解決
(srcフォルダの直下におけばいい?)
2. weblogicの起動時オプションに
-Dlog4j.configuration=file:/// を追加
 
( ´_ゝ`)
1はEclipseでの対処法っぽい。
が対象のプロジェクトはEclipse使わずに
直接Antでビルドを行う。
正直Eclipseに取り込む手順を知らぬ。
つまり、
【却下】
      ∧,,∧  .∧,,∧
  ∧∧(´‐ω‐`)(´‐ω‐`)∧∧
 (´‐ω‐).∧∧) (∧∧ (‐ω‐`) 
 | U (´‐ω‐`)(´‐ω‐`) と ノ
  u-u (l    ) (    ノ u-u
       `u-u' `u-u'
2はtypoしてる所があるのか上手くいかないorz
なのでそれ以外の対処をしてみた。

2はsetDomainEnv.cmdかshあたりに
LOG4J_CONFIG_FILEって変数を設定する部分が有るので
そこにxmlの場所書いておけば動く。
 
1のwarファイルのWEB-INF/classesフォルダに
log4j.xmlがあれば解決、を
srcフォルダに置く以外の方法でやってみた。
 

力技編

webアプリケーション実行時の
WEB-INF/classesフォルダに
直接log4j.xmlを配置する。
webアプリケーション実行時は
weblogicドメインフォルダ
(デフォルトならbase_domain)内の
servers/サーバ名/tmp内を探索すると
warフォルダがあって
その中をさらに探すとWEB-INF
更に中にclassesフォルダがあるので
そこに置く。
力技なのでwebアプリケーションサーバ
起動している間しかもたない。
 

ビルド時に対処編

根本的な対処法。
まずwarファイルの元になるプロジェクトの
WEB-INF/classesフォルダにlog4j.xmlを放り込む。
 次にbuild.xmlを修正する。
(元々classesタグが書いてあれば
WEB-INF/classesフォルダにlog4j.xmlを追加するだけでいける)

<war destfile="hoge.war" webxml="(web.xmlの場所)"><classes dir="(WEB-INF/classesの場所)" />
    <!-- classesタグを追加 -->
</war>

EclipseでもAntでビルドしてるならこの方法が使えるはず。
余分なファイルや格納したくないファイルが
WEB-INF/classes内にある場合は
includes="追加したいファイル"か
excludes="格納したくないファイル"を
上手く使えばいいと思う。

まとめ

AntはJava使ってるならいつかは出会うツールだと思うので
Javaの勉強をしてる人は息抜きに触ってると
幸せになれるかもしれません。
www.amazon.co.jp