2012-12-14 17 views
5

私はJavaアプリケーションでコモンズのログを使用していますが、スタックトレースから例外をログに記録します。Javaでcommons.loggingを使用して例外を記録する?

catch(IOException exception) { 
    logger.error("IOException Occured :", exception.fillInStackTrace()); 

     //Print the entire stack trace to log file. 
     throw new AsExceptionUtl(APPMessageHelper.getMessage(APPMessageConstants.ERROR_FailedLoadFile, documentPath)); 
    } 

これは正しいですか?そして、スタックトレースをログに出力しますか?あなたは例外をログに記録する場合

答えて

4

、そしてちょうどスタックトレースが表示されるかどうかを

logger.error("IOException Occured :", exception); 

を使用するかどうか、基礎となるロギング実装が何であるかに依存し、それがどのように構成されています。 AFAIKでは、ほとんどまたはすべての実装でデフォルトで例外のスタックトレースが表示されます。

+0

+1必要に応じてスタックトレースが埋め込まれています。スタックトレースを変更しない限り、明示的に呼び出すことはできません(私のライブラリで行っていますが、一般的には良い考えです:) –

+0

@ peter-lawrey @ jb-nizetだから、私の場合は 'exception.fillInStackTrace()'は何をしますか? –

+2

ThrowableのコンストラクタがすでにfillInStackTrace()を呼び出しているため、何もありません。スタックトレースはデフォルトでそこにあります。ご心配なく。 –

2

Apacheコモンズロギングの説明:インターネット上にはこれに関する多くのドキュメントはありません。

Javaコードにメッセージを記録するには、ソースコードに2つのクラスをインポートする必要があります。

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

、あなたのログを作成するには、次のいずれかの方法で、あなたのクラスの属性を作成します。

private Log m_log = LogFactory.getLog(MyClass.class); 

または

private Log m_log = LogFactory.getLog("MyClassLogger"); 

最初のオプションは、単に一般的なロガーを作成していますクラスのために、デフォルトのロギングオプションによって制御されます。 2番目のオプションは、「MyClassLogger」という名前の特定のロガーを作成することです。これはデフォルトに個​​別に制御できます。ロギングを使用する他のサードパーティのソースコードを使用していても、そのソースコードからデバッグ情報やその他の情報を見たくない場合は、これを行うことができます。 ロガーの使用はかなり簡単です。

m_log.fatal(Object message); 
m_log.fatal(Object message, Throwable t); 
m_log.error(Object message); 
m_log.error(Object message, Throwable t); 
m_log.warn(Object message); 
m_log.warn(Object message, Throwable t); 
m_log.info(Object message); 
m_log.info(Object message, Throwable t); 
m_log.debug(Object message); 
m_log.debug(Object message, Throwable t); 
m_log.trace(Object message); 
m_log.trace(Object message, Throwable t); 

これらの方法は、優先度の高い順にリストされています。 Commons loggingは、デフォルトでINFO以降のすべてのメッセージを表示するように設定されています。ご覧のように、各メソッドには例外などのThrowable型を送信できるメソッドがオーバーロードされています。非常に便利です! メッセージを記録するために必要なのはこれだけです。あなたのケースでは

、あなただけ使用する必要があります。

logger.error("IOException Occured :", exception); 

ここに例外オブジェクトがスローされた例外をログに記録されるように、スタックトレースをコールする必要はありません。

+0

このように例外をロギングしても、必ずしも例外のスタックトレースが記録されるわけではなく、メッセージをログに入れることができます。 "IOExceptionが発生しました:ソケットが閉じました"というメッセージが表示されます。 –

関連する問題