Javaのスタックトレースの読み方や標準出力や標準エラー出力の出し分け方法など。ThrowableクラスのprintStackTraceメソッドの使い方についてまとめています。
このページの目次です。
Javaの例外クラスのトップであるThrowableクラスにprintStackTraceメソッドがあります。 Javaの入門書などで例外処理のtry/catch文で、よく見かけるprintStackTraceメソッドです。
printStackTraceメソッドを利用することにより、例外情報を標準エラー出力に出力できます。
などの情報を発生元から呼出元まで積上げ式で出力してくれます。
ちなみに積上げ式の出力のことをスタックトレースといいます。
Javaのスタックトレースは、例外の発生元とそこまでの経路の情報を詳細に示すもので、デバッグ時に大変役立つ情報となります。
でもぱっと見、読み方が分からない、となってしまう出力ですね。以下の3つを覚えておくと読めると思います。
図は「メソッドの呼出構造と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
実行するとプロンプトに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] 標準出力:終了します。
ご存知かもしれませんが、コマンドラインにはリダイレクトという機能があり、これを使うとプログラムの標準出力の内容をファイルに吐き出せます。
以下のように「>」を使用することで標準出力の内容がファイルに吐き出されて、プロンプトに出力されなくなります。
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つにすると追加書き込みできます。 ここではやりませんが、試してみてください。
今度は標準エラー出力の方をファイルに出力してみます。 その場合は「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)
今度は標準出力と標準エラー出力を両方同じファイルにしてみます。 その場合は、出力ファイルのパスの後に「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] 標準出力:終了します。
INFOとERROR別々のファイルに出力するには、以下のようにします。
java Sample 2> sample_err.out 1> sample_info.out
それぞれ別々のファイルに吐かれましたね。
Javaのスタックトレースは、例外の発生元とそこまでの経路の情報を詳細に示すもので、デバッグ時に大変役立つ情報となります。
などの情報を発生元から呼出元まで積上げ式のスタックトレースをprintStackTraceメソッドで出力できます。
また、リダイレクトを使用したログ出力を行いたい場合、JavaではprintStackTraceメソッドを使用すると標準出力と切り分けられて、 INFOとERROR両方出すとかERRORのみ出すとか、即席でログを切り替えられます。
ちょっとしたアプリケーションの場合、わざわざ外部のログ出力ライブラリを使わなくても簡単にログ出力が行えて便利ですね。
try/catchによる処理継続、finallyブロック、例外クラスの種別など。Javaの例外処理についてまとめています。
Javaとは?から言語の枠を超えるところまで、Java言語についてまとめています。
スポンサーリンク
サイト内のページ
言語
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インフラセキュリティ
公開サーバーのセキュリティ
SI
ホームページの作り方
スポンサーリンク
関連サイト内検索ツール
zealseedsおよび関連サイト内のページが検索できます。
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
3.136.18.192
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク
Copyright (C) 2007-2024 zealseeds. All Rights Reserved. Loarding…