我的Java记录器(例如logback)如何找到我的代码的行号?

在包含文件行号的高性能系统中,这是性能问题吗?

它是否需要引发异常并分析堆栈跟踪以执行此操作,或者还有其他技巧吗?

谢谢

最佳答案

行号被编译到.class文件中,获取行号肯定比不行。

您可以在不通过Thread#getStackTrace()引发异常的情况下获得stacktrace,但这与创建异常的开销大致相同(您无需引发并捕获它)。

How Expensive is Thread.getStackTrace()?中所述,收集信息可能非常昂贵。

但是,仅凭过多的日志记录就已经可以大大降低系统速度。


  在包含文件行号的高性能系统中,这是性能问题吗?


您应该测试一下。如果已经不是没有行号的性能问题,则很可能没有问题。这完全取决于您登录的位置和频率。



documentation还提到行号


  生成行号信息并不是特别快。因此,除非执行速度不是问题,否则应避免使用它。

10-07 13:18
查看更多