【问题标题】:Detect code line of parameter string检测参数字符串的代码行
【发布时间】:2012-09-22 14:26:23
【问题描述】:

我想有一种方法可以快速将详细信息转储到日志中。它会是这样的:

public static void log(String message, Class<?> sourceClass){
    dump(formattedTime+sourceClass.getName()+"line"+lineNumberfromwhichthemessagecomes 
    (if several occurences are found, show all of them if there's no other way to
    detectwhere has the method been called from).
}

我已经知道创建一个新的异常对象并获取其堆栈跟踪的第一行的行号的技巧,但是通过使用它,我必须将行号添加为参数,因为如果你在里面做这个技巧log 方法,您将始终获得相同的行号(您使用的那一行)。

有什么办法可以做到)?

【问题讨论】:

  • 你不能用第二行代替第一行,然后取那个行号吗?比您可以将逻辑保留在记录器本身中。
  • 您根本不应该使用异常。 Thread.currentThread().getStackTrace() 避免了代价高昂的异常并为您提供相同的堆栈信息。

标签: java logging metaprogramming meta line-numbers


【解决方案1】:

您可以使用 Exception 的 getStackTrace() 方法来获取堆栈帧的列表。然后,您可以将堆栈向上移动 1 个元素或使用某些逻辑(例如,直到您获得不在日志记录类中的方法)并使用该 StackTraceElement 中的行号进行日志记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多