QA@IT

weblogicのロギングについて

3212 PV

Java1.6
weblogic10.?
Tomcat6

eclipseで動的プロジェクトを作成し、そこにサーブレットを作成しました。
そのサーブレットに下記サイトのコードリスト3-4をコピーしました。
eclipseのサーバはTomcatを使用しているので、下記設定に変更し、動作を確認し
コンソールにログが出力されていることを確認しました。

System.setProperty(LogFactory.FACTORY_PROPERTY,"apache.logging.commons.LogFactoryImpl");

その後、参照したサイトのコードに変更し、別環境にあるweblogicにwarファイルを作成しデプロイしました。
次に、アプリのロギングの構成から対象アプリのログファイルを設定しました。

実行すると、ログ出力以外の処理は正常に終了し、server.logおよびdomain.logには何も出力されていませんでした。

期待は、アプリのロギングの構成で指定したファイルに、コードリスト3-4で指定したログファイルが出力されることです。

どなたか原因などをご存じの方がいらっしゃいましたら、ご教示ください。

《参照サイト》
http://otndnld.oracle.co.jp/document/products/wls/docs100/logging/config_logs.html

回答

Weblogic 12、Java7ですが、こちらでは提示サイトのような手段でログを表示できました。

  1. $BEA_HOME/modules/com.bea.core.weblogic.commons-logging_2.0.0.0.jarをWEB-INF/libへコピーする(Weblogic がversion12だったので、2.0.0.0です)。
  2. Apacheなどで拾ってきたcommons-logging.jarをWEB-INF/libへコピーする。
  3. ソースは下記(参照3-4修正版)を使用。
  4. Eclipseの該当Webプロジェクトをwar形式でエクスポートし、Weblogicへデプロイする。
  5. 実行する(今回はJSPからクラスを呼び出しました)とserver.logにメッセージが出力される。
package jp.co.atmarkit.qa;
//↑packageを指定しないと外部から呼びだせない
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
 public class MyCommonsTest {
  public void testWLSCommonsLogging() {
    //Weblogicが起動時に設定するので削除
    //System.setProperty(LogFactory.FACTORY_PROPERTY,
    //    "weblogic.logging.commons.LogFactoryImpl");
    //LogFactoryインスタンスは直接呼ぶ必要がないので修正
    Log clog = LogFactory.getLog(MyCommonsSample.class);
    clog.debug("Hey this is common debug");
    clog.fatal("Hey this is common fatal", new Exception());
    clog.error("Hey this is common error", new Exception());
    clog.trace("Dont leave your footprints on the sands of time");
  }
}

失敗しそうな箇所は、下記の3つ、対応策も書いてみました。

  1. WEB-INF/libにjarを入れていない。→ClassNotFoundExceptionが発生し、server.logに記録されている。
  2. WeblogicのLogクラスではなくJDK標準のLogクラスを使ってしまう。→Weblogicを起動したコンソールに、ログメッセージが表示される。
  3. server.logの見落とし。→server.log内のメッセージを検索して探す。
  4. warがキャッシュされデプロイ更新できていない。→Webアプリを削除後、ディレクトリからも一度削除し、再デプロイする。

#ログ出力しかしないコードをどうやって正常終了したか確認できるのか、ちょっと不思議です。

編集 履歴 (0)
  • ご回答誠にありがとうございました。4が原因でした。
    また、ご指摘申し訳ありませんでした。
    質問の記載が不十分でした。
    正常終了と判断したのは、ログ出力の他にPrintWriterで文字列を出力するロジックしかなく、画面に意図する内容が表示されていたこと、全てのコードをtry-chatchで囲いスタックトレースを吐く処理を記載してあったことより判断致しました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。