web-dev-qa-db-ja.com

ロガーを使用して例外を印刷する方法は?

ロガーを使用してcatchブロックでキャッチされたすべての例外を出力したい状況があります。

 try {
        File file = new File("C:\\className").mkdir();
        fh = new FileHandler("C:\\className\\className.log");
        logger.addHandler(fh);
        logger.setUseParentHandlers(false);
        SimpleFormatter formatter = new SimpleFormatter();
        fh.setFormatter(formatter);
    } catch (Exception e) {
        logger.info(e);
    }

エラーロガーをJava.io.Exception...に適用できない

私の懸念は、tryブロックで非常に多くのことを行い、catch(Exception e)としてcatchブロックを1つだけ保持している場合、catchブロックでキャッチされたあらゆる種類の例外を出力するロガーを使用する方法はありますか?注:Java.util.logging.Logger APIを使用しています

17
Pankaj

おそらく、どのロガーを使用しているのかを明確にする必要があります。

_org.Apache.commons.logging.Log_インターフェイスにはメソッドvoid error(Object message, Throwable t)(およびメソッドvoid info(Object message, Throwable t))があり、カスタムメッセージとともにスタックトレースを記録します。 Log4J実装にもこのメソッドがあります。

だから、おそらくあなたは書く必要があります:

_logger.error("BOOM!", e);
_

INFOレベルでログに記録する必要がある場合(ただし、奇妙なユースケースかもしれません)、次のようになります。

_logger.info("Just a stack trace, nothing to worry about", e);
_

それが役に立てば幸い。

29

使用:LOGGER.log(Level.INFO, "Got an exception.", e);
またはLOGGER.info("Got an exception. " + e.getMessage());

4
Elobilo

以下のようにスタックトレースを記録してみてください。

logger.error("Exception :: " , e);
1
John Jai

このメソッドを使用して、例外スタックをStringに記録できます

 public String stackTraceToString(Throwable e) {
    StringBuilder sb = new StringBuilder();
    for (StackTraceElement element : e.getStackTrace()) {
        sb.append(element.toString());
        sb.append("\n");
    }
    return sb.toString();
}
0
Shashi