我有一个应用程序有两个名为" Service"在包结构中的两个不同的地方。日志记录输出文件和行号,例如:(Service.java:102) 这将成为Eclipse中控制台输出中的可单击链接。通常,这些链接很棒,因为只需单击一下,就可以准确找到输出的打印位置。 但现在我有两个Service.java文件,完成两个完全不同的东西,并且它们位于包结构中的不同位置。我无法重命名其中任何一个。 当我点击链接时,即使在编辑器中打开了正确的java文件,它也会将我带到错误的java文件中。
我已经四处寻找,但我无法找到答案。有没有办法告诉Eclipse首先考虑哪个java文件?或者先说出要查看哪个包的方法?什么,什么,使这些可点击链接再次有用?
答案 0 :(得分:1)
我知道如何在控制台输出中打印可点击类链接的三种方法。
第一种方式:
只需在括号内打印班级名称:System.out.println("(Service.java:42)");
这是一种简单的方法,如果您没有使用含糊不清的类名,它将起作用。由于Eclipse控制台没有确定应该打开哪个文件所需的信息,我想它会打开第一个出现的文件。
第二种方式:
在你的情况下。我会通过使用StackTraceElement
打印类名来实现。
那样:
StackTraceElement element = new StackTraceElement(
"Service", // Class name
"myFunnyMethodName", // Method name
Service.class.getName()+".java", // Path to File
2); // line number
System.out.println(element);
第三种方式:
如果您不想创建StackTraceElement
,可以从当前主题获取。
示例:
System.out.println(Thread.currentThread().getStackTrace()[1]);
修改强>
另一种选择是尝试Grep Console Plugin for Eclipse。您可以使用链接,颜色,弹出等定义自己的表达式...
答案 1 :(得分:1)
我猜你的记录器配置如下这样就输出了(Service.java:102)
这样的日志:
(%F:%L)
%F:用于输出发出日志记录请求的文件名。
%L:用于输出发出日志记录请求的行号。
尝试使用%l
代替
%l:用于输出生成记录事件的调用者的位置信息。
修改强>
此解决方案似乎效果不佳,打印
com.x.y.z.MyClass.myMethod(MyClass.java:36)
=>该链接仅在类名,同一问题上。
但使用以下模式将起作用
(%C.java:%L)
它会打印一个完整的链接:
(com.x.y.z.MyClass.java:36)