所有分类
  • 所有分类
  • 未分类

Java日志–打印文件名等

简介

本文介绍Java如何打印文件名、类名、方法名、行号。

IDE工具

Idea:可以通过快捷键模板生成打印信息:File=> Settings=> Editor=> Live Templates=>
本处我将打印类名、方法、行号的快捷键设为:soutd

线程栈

文件名:Thread.currentThread().getStackTrace()[1].getFileName()
类名:Thread.currentThread().getStackTrace()[1].getClassName()
方法名:Thread.currentThread().getStackTrace()[1].getMethodName()
文件名:Thread.currentThread().getStackTrace()[1].getLineNumber()

例如:可以在想要调试的地方直接调用以下语句

System.out.println(String.format("%s : %s : %s : %d", 
		Thread.currentThread().getStackTrace()[1].getFileName(),
		Thread.currentThread().getStackTrace()[1].getClassName(),
		Thread.currentThread().getStackTrace()[1].getMethodName(),
		Thread.currentThread().getStackTrace()[1].getLineNumber()));

可以直接将上边这个代码写到template,以dbg为快捷键。注意:取消选中:Use code formatter

讲解

Thread.currentThread().getStackTrace()返回值:StackTraceElement[],这是一个数组。

第0项:当前线程信息
第1项:当前方法执行的堆栈
第2项:调用者的堆栈

第1项和第2项的讲解

如果想要把这个调试语句封装为类,则下标就得是2。代码如下

public class DBG {
    public static String getFileName() {
        return Thread.currentThread().getStackTrace()[2].getFileName();
    }
    
    public static String getClassName() {
        return Thread.currentThread().getStackTrace()[2].getClassName();
    }
    public static String getMethodName() {
        return Thread.currentThread().getStackTrace()[2].getMethodName();
    }

    public static int getLineNumber() {
        return Thread.currentThread().getStackTrace()[2].getLineNumber();
    }

    public static void printAll(String args[]) {
        System.out.println(getFileName() + " :" + 
                          getClassName() + " :" + 
                          getMethodName() + " :" +
                          getLineNumber());
    }
}
0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录