トップ 言語 Java クラスライブラリ printStackTrace

JavaのprintStackTrace―スタックトレースや標準エラー出力切替など

Javaのスタックトレースの読み方や標準出力や標準エラー出力の出し分け方法など。ThrowableクラスのprintStackTraceメソッドの使い方についてまとめています。

▲記事トップへ

目次

このページの目次です。

1. JavaのprintStackTraceとは

2. Javaのスタックトレースの読み方

3. JavaのprintStackTrace()の使い方

4. まとめ

もっと知識を広げるための参考

更新履歴

1. JavaのprintStackTraceとは―Throwableクラスのメソッド

Javaの例外クラスのトップであるThrowableクラスにprintStackTraceメソッドがあります。 Javaの入門書などで例外処理のtry/catch文で、よく見かけるprintStackTraceメソッドです。

printStackTraceメソッドを利用することにより、例外情報を標準エラー出力に出力できます。

などの情報を発生元から呼出元まで積上げ式で出力してくれます。

ちなみに積上げ式の出力のことをスタックトレースといいます。

2. Javaのスタックトレースの読み方―3つのポイント

Javaのスタックトレースは、例外の発生元とそこまでの経路の情報を詳細に示すもので、デバッグ時に大変役立つ情報となります。

でもぱっと見、読み方が分からない、となってしまう出力ですね。以下の3つを覚えておくと読めると思います。

メソッドの呼出構造とprintStackTraceメソッド、スタックトレースの出力

図は「メソッドの呼出構造とprintStackTraceメソッド、スタックトレースの出力」を表したものです。

3. JavaのprintStackTrace()の使い方―標準入力と標準エラーを出し分ける

JavaのprintStackTrace()の使い方ですが、例外の詳細なトレース情報に加え、標準エラー出力に出力してくれて、正常時の出力とエラー時の出力を実行時に選択できて便利です。 ちょっとしたアプリケーションの場合、ロガーを使わなくても簡単にログ出力を切りかえられて便利です。

どういうことか、以下のサンプルとその実行方法で説明していきます。

printStackTrace()の使い方を説明するため、簡単なサンプルプログラムを作成していくつかの実行方法を紹介いたします。

サンプルコード

以下では、printStackTrace()を記述したサンプルプログラムです。

public class Sample {

	public static void main(String[] args) {
		int x = 15;
		int y = 0;
		Sample obj = new Sample();
		System.out.println("[INFO] 標準出力:開始します。");

		try {
			obj.divideOpration(x,y);
		} catch (ArithmeticException ae) {
			System.err.println("[ERROR] 標準エラー出力:エラーが発生しました。");
			ae.printStackTrace();
		}
		System.out.println("[INFO] 標準出力:終了します。");
	}

	int divideOpration(int x, int y){
		return x/y;
	}
}

正常時の処理を確認するための、[INFO]ログと例外発生時の[ERROR]ログを記述しています。 [INFO]ログは、おなじみの標準出力を行うSystem.out.println()です。 [ERROR]ログは、System.err.println()を使って、標準エラー出力にしています。

では、いくつかの実行方法で実行していきます。

コンパイル

javac Sample.java

実行1―普通に実行する

実行するとプロンプトにSystem.out.println()の出力もSystem.err.println()の出力もprintStackTrace()の出力も全部出力しますね。

java Sample
[INFO] 標準出力:開始します。
[ERROR] 標準エラー出力:エラーが発生しました。
java.lang.ArithmeticException: / by zero
        at Sample.divideOpration(Sample.java:19)
        at Sample.main(Sample.java:10)
[INFO] 標準出力:終了します。

ご存知かもしれませんが、コマンドラインにはリダイレクトという機能があり、これを使うとプログラムの標準出力の内容をファイルに吐き出せます。

実行2―標準出力の内容をファイルに吐き出す。

以下のように「>」を使用することで標準出力の内容がファイルに吐き出されて、プロンプトに出力されなくなります。

java Sample > sample_info.out
[ERROR] 標準エラー出力:エラーが発生しました。
java.lang.ArithmeticException: / by zero
        at Sample.divideOpration(Sample.java:19)
        at Sample.main(Sample.java:10)

sample_info.outを開くと標準出力の内容が出力されています。

[INFO] 標準出力:開始します。
[INFO] 標準出力:終了します。

ちなみに、「>>」とリダイレクトを2つにすると追加書き込みできます。 ここではやりませんが、試してみてください。

実行3―標準エラー出力の内容をファイルに吐き出す。

今度は標準エラー出力の方をファイルに出力してみます。 その場合は「2>」とします。

java Sample 2> sample_err.out
[INFO] 標準出力:開始します。
[INFO] 標準出力:終了します。

sample_err.outを開くと標準出力の内容が出力されています。

[ERROR] 標準エラー出力:エラーが発生しました。
java.lang.ArithmeticException: / by zero
        at Sample.divideOpration(Sample.java:19)
        at Sample.main(Sample.java:10)

実行4―標準出力と標準エラー出力を両方同じファイルに吐き出す。

今度は標準出力と標準エラー出力を両方同じファイルにしてみます。 その場合は、出力ファイルのパスの後に「2>&1」と記述します。 2番の標準エラー出力を1番の標準出力に回すという指定になります。

java Sample > sample.out 2>&1

sample.outを開くと標準出力と標準エラー出力の両方が出力されています。

[INFO] 標準出力:開始します。
[ERROR] 標準エラー出力:エラーが発生しました。
java.lang.ArithmeticException: / by zero
        at Sample.divideOpration(Sample.java:19)
        at Sample.main(Sample.java:10)
[INFO] 標準出力:終了します。

実行5―INFOとERROR別々のファイルに出力する。

INFOとERROR別々のファイルに出力するには、以下のようにします。

java Sample 2> sample_err.out 1> sample_info.out

それぞれ別々のファイルに吐かれましたね。

4. まとめ―printStackTraceメソッドの使い方

Javaのスタックトレースは、例外の発生元とそこまでの経路の情報を詳細に示すもので、デバッグ時に大変役立つ情報となります。

などの情報を発生元から呼出元まで積上げ式のスタックトレースをprintStackTraceメソッドで出力できます。

また、リダイレクトを使用したログ出力を行いたい場合、JavaではprintStackTraceメソッドを使用すると標準出力と切り分けられて、 INFOとERROR両方出すとかERRORのみ出すとか、即席でログを切り替えられます。

ちょっとしたアプリケーションの場合、わざわざ外部のログ出力ライブラリを使わなくても簡単にログ出力が行えて便利ですね。

もっと知識を広げるための参考

更新履歴

戻る

スポンサーリンク

サイト内のページ

言語
C・C++ /HTML /Java /JavaScript /PHP /シェルスクリプト

開発環境
Ant /Burp /Eclipse /Fiddler /gcc /gdb /Git /g++ /JDK /JMeter /JUnit /Teraterm /ZAP

技術・仕様
Ajax /CORBA /Jakarta EE(旧称J2EE、Java EE) /JNI

ライブラリ/Framework/CMS
bootstrap /jQuery /FuelPHP /Lucene /MyBatis /Seasar2 /Spring /Struts /WordPress

Web API
Google Maps

ITインフラOSとミドルウェア
Linux /Windows /シェル
ActiveMQ /Tomcat /MariaDB /MySQL /Nagios /Redis /Solr

ITインフラサーバー
公開Webサーバー

ITインフラネットワーク
プログラミング /構築

ITインフラセキュリティ
公開サーバーのセキュリティ

PC製品
ZOTAC

SI
ホームページの作り方

その他
IT用語 /ITスキル体系

スポンサーリンク

関連サイト内検索ツール

zealseedsおよび関連サイト内のページが検索できます。

IPアドレス確認ツール

あなたのグローバルIPアドレスは以下です。

18.217.182.45

HTMLの表示色確認ツール

パスワード生成ツール

文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。

ここに生成されます。

スポンサーリンク