Java获取调用当前方法的方法名和行数(亲测可行)

有时候一个方法被很多方法调用了,但是在调试应用程序的时候,需要知道是哪个方法调用它的,方便定位bug问题。否者,比较难以理清和解决一些bug问题。

适用:任何适用java语言编程的地方,java后端和android端。

以下是我总结的工具打印方法。你也可以基于此方法进行定制,可以打印完整的调用栈信息。

c 复制代码
package utils;

/**
 * 日之类测试方法
 */
public class LogsUtilsTest {

    public static void main(String[] args) {
        parentMethod01();
        parentMethod03();
        parentMethod05();
    }
    private static void parentMethod01(){
        childMethod();
    }

    private static void parentMethod02(){
        childMethod();
    }
    private static void parentMethod03(){
        childMethod();
    }
    private static void parentMethod04(){
        childMethod();
    }
    private static void parentMethod05(){
        childMethod();
    }
    private static  void childMethod(){
        System.out.println("childMethod StackTrace:"+LogUtils.getParentClassStackTrace(LogsUtilsTest.class.getName()));
    }
}
c 复制代码
package utils;

/**
 * 日志工具类
 */
public class LogUtils {

    /**
     * 获取当前方法调用的类名+方法+代码行
     * @param currClassName
     * @return
     */
    public static  String  getParentClassStackTrace(String currClassName){
        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
        StackTraceElement log = stackTrace[2];
        String tag = null;
        int parent=0;
        for (int i = 1; i < stackTrace.length; i++) {
            StackTraceElement e = stackTrace[i];
            if(e.getClassName().equals(currClassName)){
                parent=i;
                break;
            }
        }
        StackTraceElement parentStack = stackTrace[parent+1];
        tag = "《"+parentStack.getClassName() + "》.《" + parentStack.getMethodName()+"》.《"+parentStack.getLineNumber()+"》";
        if (tag == null) {
            tag = log.getClassName() + "." + log.getMethodName()+"."+log.getFileName()+"."+log.getLineNumber();

        }
        return tag;
    }
}

代码运行打印:

相关推荐
圆山猫6 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
城管不管7 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
IT小白杨7 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
豆瓣鸡7 小时前
算法日记 - Day3
java·开发语言·算法
萧瑟余晖7 小时前
Java深入解析篇九之NIO详解
java·网络·nio
The Chosen One9858 小时前
高进度算法模板速记(待完善)
java·前端·算法
极光代码工作室10 小时前
基于SpringBoot的课程预约系统
java·springboot·web开发·后端开发
Leighteen10 小时前
`try-finally` 里的 `return`:为什么 `finally` 会悄悄改掉返回值、吞掉异常
java·开发语言
名字还没想好☜11 小时前
Go 的 time.After 在 select 循环里内存泄漏:定时器堆积原理与 timer.Reset 正确姿势
java·数据库·golang·go·goroutine
圆山猫11 小时前
[Virtualization](三):RISC-V H-extension 与 Guest 执行模式
android·java·risc-v