我正在开发一个应用程序。作为其中的一部分,当Java程序执行时,我们希望显示代码已执行的Java程序源的行号。我正在使用Code类来获取代码中方法的行号。但是我想得到已经执行的源代码的行号,即代码路径。
我将添加这个,我编写的程序显示方法的行号。
class LineNum
{
LineNumber[] ln = new LineNumber[300];
JavaClass clazz ;
Code classinfo ;
public static void printCode(Method[] methods) {
System.out.println("Entering PrintCode");
for(int i=0; i < methods.length; i++) {
System.out.println(methods[i]);
Code code = methods[i].getCode();
if(code != null) // Non-abstract method
{
System.out.println(code.getLineNumberTable());
}
}
}
public static void main(String[] args) {
LineNum liner = new LineNum();
liner.clazz = Repository.lookupClass("package_name.File_name");
printCode(liner.clazz.getMethods());
}
}
答案 0 :(得分:2)
如果使用Log4J作为日志记录库,则可以将其配置为输出行号作为模式的一部分。请参阅'PatternLayout'和'L'转换模式字符。
您可以使用转化模式,例如:"%-5p [%t](%L): %m%n"
来产生:
DEBUG [main](103): Message 1
WARN [main](104): Message 2
PatternLayout API:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
答案 1 :(得分:1)
你可以打电话
StackTraceElement[] ele = Thread.currentThread().getStackTrace()
随时给你以前的电话。 StackTraceElement类有一个方法getLineNumer()来获取行号。
http://docs.oracle.com/javase/7/docs/api/java/lang/StackTraceElement.html
答案 2 :(得分:1)
我认为使用lo4j是最佳解决方案(@bazwilliams如何描述)。代码取决于简单的库,日志行号可以在代码之外配置。
@bazwilliams - 您只能为选定的日志记录类别配置布局模式(从而配置选定的appender)。
PS。我回答是因为我不知道如何评论@bazwilliams的答案(或者我不能)。