思路:
IDEA 或者 Eclipse 的控制台遇到(LogLocationTest.java:10)这样的输出信息时候,允许用户点击直接跳 转到对应的位置。那么我们所关心得就是如何获得java文件名以及语句所在的行号。
实现:
获取使用该工具类的代码所在的方法,java文件名,以及行号,
并拼装成 MethodName(FileName.java:LineNumber) 这样的格式,
前边的MethodName是辅助信息,后边的是用于让开发工具识别能够跳转的信息。
1.工具类
package cn.edu.nyist.secondhandbook.util;
public class LogLocalityUtil {
private static StringBuilder sb = new StringBuilder();
public static String getLogLocality(){
if(sb != null){
sb.setLength(0);
}
StackTraceElement[] trace = Thread.currentThread().getStackTrace();
StackTraceElement tmp = trace[2];
return sb.append(tmp.getMethodName())
.append("(")
.append(tmp.getFileName())
.append(":")
.append(tmp.getLineNumber())
.append(")").toString();
}
}
2.测试类
package cn.edu.nyist.secondhandbook.test;
import cn.edu.nyist.secondhandbook.util.LogLocalityUtil;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LogLocationTest {
public static void main(String[] args) {
try{
log.info(LogLocalityUtil.getLogLocality()+"try日志信息打印");
throw new RuntimeException("运行出异常了");
}catch (Exception e){
log.error(LogLocalityUtil.getLogLocality()+"catch异常信息打印:{}", e.getMessage());
}finally {
log.info(LogLocalityUtil.getLogLocality()+"finally日志信息打印");
}
}
}
3.运行截图