检测参数字符串的代码行

时间:2012-09-22 14:26:23

标签: java logging metaprogramming meta line-numbers

我希望有一种方法可以将详细信息快速转储到日志中。它会是这样的:

public static void log(String message, Class<?> sourceClass){
    dump(formattedTime+sourceClass.getName()+"line"+lineNumberfromwhichthemessagecomes 
    (if several occurences are found, show all of them if there's no other way to
    detectwhere has the method been called from).
}

我已经知道有关创建一个新的Exception对象并获取其堆栈跟踪的第一行的行号的技巧,但是通过使用它我必须添加行号作为参数,因为如果你在里面做的诀窍日志方法,您将始终获得相同的行号(您进行操作的行之一)。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:6)

您可以使用Exception的getStackTrace()方法来获取堆栈帧的列表。然后,您可以通过1个元素向上移动堆栈或使用某些逻辑(例如,直到获得不在您的日志记录类中的方法)并使用该StackTraceElement中的行号进行日志记录。