自作ログクラスを簡単に作成 [Java]
Log4jやslf4jを使えば、簡単にログ出力を実現できますが、それでもなお自作したい場合に、こんな機能を使うとすっきりしたプログラムを実装できます。
わざわざ呼び出し側でメソッド名や行番号を引数で渡すというのは、とても見苦しい。そこで呼び出されるログクラス側で呼出元の情報を取得します。理屈としてはスタックに積まれている情報を取得するだけ。
ログクラス
package sample.utils;
public class Logger {
static public void print() {
StackTraceElement[] elements = Thread.currentThread().getStackTrace();
for (StackTraceElement element : elements) {
System.out.println("-----------------------------");
System.out.println("ClassName : " + element.getClassName());
System.out.println("FileName : " + element.getFileName());
System.out.println("MethodName : " + element.getMethodName());
System.out.println("LineNumber : " + element.getLineNumber());
System.out.println("-----------------------------");
}
}
}
呼び出し側
package sample;
import sample.utils.Logger;
public class Test01 {
/**
* @param args
*/
public static void main(String[] args) {
Logger.print();
}
}
実行結果
-----------------------------
ClassName : java.lang.Thread
FileName : null
MethodName : getStackTrace
LineNumber : -1
-----------------------------
-----------------------------
ClassName : sample.utils.Logger
FileName : Logger.java
MethodName : print
LineNumber : 6
-----------------------------
-----------------------------
ClassName : sample.Test01
FileName : Test01.java
MethodName : main
LineNumber : 12
-----------------------------
スタック3番目(配列で言うなら2)に呼出元の情報が入っています。
コメント 0