Java Eclipse控制台链接,包结构中的重复文件名,打开哪个?

Java Eclipse控制台链接,包结构中的重复文件名,打开哪个?,java,eclipse,Java,Eclipse,我有一个应用程序,在包结构的两个不同位置有两个名为“Service”的类。日志记录输出的文件和行号如下所示,例如:(Service.java:102) 这将成为Eclipse中控制台输出中的可单击链接。通常情况下,这些链接很好,因为您只需单击一下,就可以找到打印输出的确切位置。 但是现在我有两个Service.java文件,它们做两件完全不同的事情,它们在包结构中的位置不同。他们两个我都不能重命名。 当我点击链接时,它会将我带到错误的java文件,即使在编辑器中打开了正确的java文件 我到处找

我有一个应用程序,在包结构的两个不同位置有两个名为“Service”的类。日志记录输出的文件和行号如下所示,例如:(Service.java:102) 这将成为Eclipse中控制台输出中的可单击链接。通常情况下,这些链接很好,因为您只需单击一下,就可以找到打印输出的确切位置。 但是现在我有两个Service.java文件,它们做两件完全不同的事情,它们在包结构中的位置不同。他们两个我都不能重命名。 当我点击链接时,它会将我带到错误的java文件,即使在编辑器中打开了正确的java文件


我到处找了,但找不到答案。有没有办法告诉Eclipse,java文件首先要考虑什么?还是一种告诉你先看哪个包裹的方法?让这些可点击链接再次有用的东西,任何东西?

我知道三种方法如何在控制台输出中打印可点击类链接

第一种方式:

只需在括号内打印类名:
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);
第三种方式:

如果您不想创建
stackTraceeElement
,可以从当前线程获取它

例如:

System.out.println(Thread.currentThread().getStackTrace()[1]);
编辑:


另一个选择是尝试。您可以使用链接、颜色、弹出窗口等来定义自己的表达式。

我猜您的记录器是这样配置的,以输出这样的日志
(Service.java:102)

%F:用于输出发出日志记录请求的文件名

%L:用于输出发出日志记录请求的行号

尝试改用
%l

%l:用于输出生成日志事件的调用方的位置信息

编辑

这个解决方案似乎不起作用,它会打印

com.x.y.z.MyClass.myMethod(MyClass.java:36)
=>链接仅在类名上,同样的问题

但使用以下模式将起作用

(%C.java:%L)
它将打印一个完整链接,如下所示:

(com.x.y.z.MyClass.java:36)

告诉我们更多关于日志记录的信息。您使用什么工具来记录日志?这是一款自制软件,具有使您更容易更快地理解更多信息的功能。我希望我能贡献它,但现在不行。我忘了提到我有一个自定义的日志系统,可以打印到标准输出(并保存到日志文件)。我使用StackTraceElement从中提取文件名和行号。我可以像您建议的那样更改代码以包含位置信息,但这会导致输出冗长。详细是不好的,因为我不只是打印一个位置,而是打印整个堆栈链。通过这种方式,对于每个日志语句,我看到了整个调用链是什么,例如:(SomeService.java:123)(Service.java:102)(BlockingQueue.java:321)我宁愿控制Eclipse的解析顺序。奇怪的是,这个错误似乎很长一段时间以来就被修复了:也许它只是在堆栈跟踪中被修复了,在logging Entries中,我没有看到这一点以及其他与stacktrace相关的bug。我还没有在Eclipse站点上报告任何内容。也许我应该报名报到。我以前遇到过几次这样的情况,我可以重命名一个类,但这次我不能重命名这个类。我敢打赌,在看到修复实现之前可能需要一段时间。它是自定义日志系统的一部分,在这里我获取堆栈跟踪,并丢弃作为日志系统本身一部分的StackTraceElements。然后我打印所有剩余的位置,如下所示:(SomeService.java:123)(Service.java:102)(BlockingQueue.java:321)。Eclipse每次都会打开错误的服务java文件,即使编辑器中打开了正确的服务java文件。因此,这可能被认为是Eclipse guyss,IMO应该解决的一个bug或特性。但是已经有一个特性可以帮助控制解析顺序了吗?我不认为这个插件可以解决Mike的问题,它更多的是通过样式和其他好东西来增强控制台。我自己已经使用grep控制台一段时间了。我喜欢用特定的关键字来画彩色线条。严重的红色,客户端为浅绿色,服务器为浅蓝色。否则,伐木就是一堆连续的黏液,在那里你看不到穿过森林的树木。有趣的是,日志记录原则上是面向层次结构的,但它总是作为一个连续的goo呈现。更好的日志查看器在哪里?一般来说,我是在猜测“Service:([0-9]+)”,认为在链接中,行号将引用正则表达式中的组1。我首先尝试使用另一个关键字,但没有行号。这个词在控制台中无法点击。
(com.x.y.z.MyClass.java:36)