ログで行番号を出力する方法

Log4J のカラクリ。基本は Throwable インスタンスからスタックトレースを取得し、そこから情報を抽出する。

サンプルソース

SampleLogger.java

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);
  }
}

SampleLoggerClient.java

public class SampleLoggerClient {
  
  public static void main(String[] args) {
      SampleLogger.log("Hello SampleLogger !!");
  }
  
}

実行結果

SampleLoggerClient.main(SampleLoggerClient.java:10) Hello SampleLogger !!
scratch/java/log-linenumber.txt · 最終更新: 2007/08/10 01:41 (外部編集)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0