我的Java记录器(例如logback)如何找到我的代码的行号?
在包含文件行号的高性能系统中,这是性能问题吗?
它是否需要引发异常并分析堆栈跟踪以执行此操作,或者还有其他技巧吗?
谢谢
最佳答案
行号被编译到.class
文件中,获取行号肯定比不行。
您可以在不通过Thread#getStackTrace()
引发异常的情况下获得stacktrace,但这与创建异常的开销大致相同(您无需引发并捕获它)。
如How Expensive is Thread.getStackTrace()?中所述,收集信息可能非常昂贵。
但是,仅凭过多的日志记录就已经可以大大降低系统速度。
在包含文件行号的高性能系统中,这是性能问题吗?
您应该测试一下。如果已经不是没有行号的性能问题,则很可能没有问题。这完全取决于您登录的位置和频率。
documentation还提到行号
生成行号信息并不是特别快。因此,除非执行速度不是问题,否则应避免使用它。