java - Java 中的调用者信息

标签 java c# trace callermembername

在 C# 中,我们有调用者信息

public void DoProcessing()
{
    TraceMessage("Something happened.");
}

public void TraceMessage(string message,
        [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
        [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
        [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
    System.Diagnostics.Trace.WriteLine("message: " + message);
    System.Diagnostics.Trace.WriteLine("member name: " + memberName);
    System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);
    System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber);
}

// Sample Output:
//  message: Something happened.
//  member name: DoProcessing
//  source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
//  source line number: 31

MSDN链接:CallerInfo

我想知道Java是否有等效的注释?

这些功能可以帮助我们更好地追踪

更新:

我写了一个类:

public class Trace {

    public static void trace() {
        StackTraceElement[] stk = Thread.currentThread().getStackTrace();
        System.out.println(String.format("LineNumber : %s, ClassName : %s, MethodName : %s, SourceLocation : %s",

                        stk[1].getLineNumber(), stk[1].getClassName(), stk[1].getMethodName(), stk[1].getFileName())


        );
    }

}

并调用trace()方法:

public class Main {
    public static void main(String[] args) throws Exception {
        Trace.trace();
    }
}

和结果:

LineNumber : 8, ClassName : Trace, MethodName : trace, SourceLocation : Trace.java

这对我来说不是真的,我想要这样的结果:

LineNumber : 3, ClassName : Main, MethodName : main, SourceLocation : Main.java

事实上,我现在想知道类和方法如何调用我的trace()(父级)

最佳答案

您创建一个异常并打印它的堆栈跟踪。

Exception e = new Exception();
e.printStackTrace();
//or
StackTraceElement[] stack = e.getStackTrace();
StackTraceElement last = stack[0];

编辑:在评论中 Fabian 提供了更好的解决方案,您不需要创建异常(exception):

Thread.currentThread().getStackTrace()

关于java - Java 中的调用者信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33315768/

相关文章:

java - 删除除 Java 制表符之外的所有其他尾随空白字符

c# - 使用 Ninject 填充 Log4Net 依赖

bash - 使 bash 脚本自跟踪的更好方法?

javascript - 如何跟踪和收集特定字段的所有使用过的依赖 JavaScript

java - XML 反序列化 java XSTream 问题

java - Hibernate 抛出奇怪的错误 : Class is not mapped

java - JTreeNode 中有两个图像?

c# - 在页面加载时触发 RadButton Onclientclicked

c# - 文本区域最大长度在按下 Enter 键时不起作用

linux - 使用 perf 记录带参数的系统调用