====== ログで行番号を出力する方法 ======
[[google>Log4J]] のカラクリ。基本は Throwable インスタンスからスタックトレースを取得し、そこから情報を抽出する。
===== サンプルソース =====
public class SampleLogger {
public static void log(Object message) {
StackTraceElement[] stackTrace = new Throwable().getStackTrace();
// 要素の0番目はThrowableを生成した位置が入り、
// 1番目にこのメソッドを呼び出したクラス情報が入ります。
StackTraceElement ste = stackTrace[1];
StringBuffer buf = new StringBuffer();
buf.append(ste.getClassName())
.append(".")
.append(ste.getMethodName())
.append("(")
.append(ste.getFileName())
.append(":")
.append(ste.getLineNumber())
.append(") ")
.append(message);
System.out.println(buf);
}
}
public class SampleLoggerClient {
public static void main(String[] args) {
SampleLogger.log("Hello SampleLogger !!");
}
}
SampleLoggerClient.main(SampleLoggerClient.java:10) Hello SampleLogger !!
==
{{tag>Java scratch}}