Eclipse控制台链接,包结构中的重复文件名,是否已打开?

时间:2014-10-25 14:47:45

标签: java eclipse

我有一个应用程序有两个名为" Service"在包结构中的两个不同的地方。日志记录输出文件和行号,例如:(Service.java:102) 这将成为Eclipse中控制台输出中的可单击链接。通常,这些链接很棒,因为只需单击一下,就可以准确找到输出的打印位置。 但现在我有两个Service.java文件,完成两个完全不同的东西,并且它们位于包结构中的不同位置。我无法重命名其中任何一个。 当我点击链接时,即使在编辑器中打开了正确的java文件,它也会将我带到错误的java文件中。

我已经四处寻找,但我无法找到答案。有没有办法告诉Eclipse首先考虑哪个java文件?或者先说出要查看哪个包的方法?什么,什么,使这些可点击链接再次有用?

2 个答案:

答案 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)