====== ログで行番号を出力する方法 ====== [[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}}