1前書き

Javaで例外を処理するとき、私たちは頻繁にログをとるか、単にスタックトレースを表示します。ただし、スタックトレースを印刷するだけではなく、スタックトレースをファイル、データベース、またはネットワーク経由で送信する必要がある場合もあります。

これらの目的のために、スタックトレースを

String

として持つことは非常に便利です。そして残念ながら、Javaはそれを直接行うための非常に便利な方法を提供していません。


2 Core Java

による変換

コアライブラリから始めましょう。


Exception

クラスの関数

printStackTrace()

は、

PrintStream

または

PrintWriter

のいずれかの1つのパラメータを取ることができます。したがって、

StringWriter

を使用して、スタックトレースを

String

に出力することができます。

StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);

その後、

sw.toString()

を呼び出すと、スタックトレースが

String

として返されます。


3 Commons-Lang

による変換

前の方法は、コアJavaを使用してスタックトレースを

String

に変換する最も簡単な方法ですが、やや面倒です。

幸いなことに、https://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22commons-lang3%22[Apache Commons-Lang]はその仕事をする機能を提供します。

Apache Commons-Langは非常に便利なライブラリで、例外を処理するために使用できるクラスなど、Java APIのコアクラスに欠けている多くの機能を提供します。

まず、プロジェクト構成から始めましょう。 Mavenを使用するときは、

pom.xml

に次の依存関係を追加するだけです。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.5</version>
</dependency>

次に、私たちの場合、最も興味深いクラスは

ExceptionUtils

です。これは、例外を操作するための関数を提供します。このクラスを使用して、スタックトレースを

Exception

から

String

として取得するのはかなり簡単です。

String stacktrace = ExceptionUtils.getStackTrace(e);


4結論

例外のスタックトレースを

String

として取得するのは難しいことではありませんが、直感的には言えません。この記事では、コアJavaを使う方法とApache Commons-Langを使う方法の2つの方法を紹介します。

Java 9では新しいリンクが追加されることに注意してください。

いつものように、コードサンプルはhttps://github.com/eugenp/tutorials/tree/master/java-strings[ここにGitHub]で見つけることができます。