プロが教えるわが家の防犯対策術!

「commons」の「Logging」を使用し検証しています。
下記のソースで、「log.isDebugEnabled()」がTRUEとならず
デバックログが出力されません。

他の「log.fatal」などの出力は問題ありません。

別ファイルに設定などが必要でしょうか?。

アドバイスお願いします。
---------------------------------------------



import org.apache.commons.logging.*;

public class LogTest {
 //ログインスタンスを取得
 public static Log log = LogFactory.getLog(LogTest.class);

 /**
  * @param args
  */
 public static void main(String[] args) {

  // 致命的なエラーの出力
  log.fatal("fatalメッセージ");

  // 通常のエラーの出力
  log.error("errorメッセージ");

  // 警告の出力
  log.warn("warnメッセージ");

  // 情報の出力
  log.info("infoメッセージ");

  // デバッグ情報の出力
  log.debug("debugメッセージ");

  // 詳細なデバッグの出力
  log.trace("traceメッセージ");

  try {
throw new Exception("Error Message");
  } catch (Exception e) {
// Exceptionのスタックトレースを出力
log.error("Error Occurs:", e);
 }
 int[] ary = new int[10000];

 if (log.isDebugEnabled()) {
  for (int i = 0; i < 10000; i++) {
  log.debug("array[" + i + "]=" + ary[i]);
 }
}
}
}

A 回答 (1件)

提供元の情報は参照してみましたか?


http://commons.apache.org/logging/guide.html
に大抵の情報は記載してあります。

Commons-logging自体は主にログ出力の仕様を提供するのが主たる
役割で、その実装(実装クラス)はアプリケーション、またはそれが動作する
環境(JRE)に依存するものです。

さて、今回の場合Commons-logging単体でLogインスタンスを生成していますが
特にその実装クラスの指定がないので内部実装されているLog4jまたはJDKの
の実装クラスにLogインスタンスが結び付けられていると思います。
確認するにはコード内のLogインスタンスから
log.getClass().getName()
確認してみてください。
出力された結果が実装クラスです。

その実装クラスには通常対応した設定情報ファイルが存在します。
現在ではすっかりデファクトスタンダードになっているLog4jの場合は
log4j.propertiesまたはlog4j.xmlなどがそれにあたります。

あまり長くなると混乱されてしまうでしょうから、要件の実現のみを
記載すると

クラスパス配下に実装クラスを定義する
commons-logging.properties
を作成し実装クラスを指定する記述を追加する。
org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog

クラスパス配下に実装クラスSimpleLogの出力設定を定義する
simplelog.properties
を作成しログレベルを指定する木津樹を追加する。
org.apache.commons.logging.simplelog.defaultlog=trace

これでtraceログまでを出力することができるようになるでしょう。

しかしSimpleLogは出力を標準エラーにリダイレクトするので
デバッグ機能としての使用は?です。
やはり慣習に従い、Log4j等のwrapperクラスを使用する(log4j.jarを導入する)ほう

よいと思います。
    • good
    • 0
この回答へのお礼

有難うございました。助かりました。

お礼日時:2007/09/16 12:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!