【发布时间】:2023-03-20 02:26:01
【问题描述】:
我正在我的 java 应用程序中实现日志记录,以便我可以调试应用程序投入生产后可能发生的潜在问题。
考虑到在这种情况下,人们无法使用 IDE、开发工具(以调试模式运行事物或逐步执行代码),记录类名、方法名和行号将非常有用每条消息。
我在网上搜索日志记录的最佳实践,发现this article 说:
你不应该包含文件名、类名和行号, 虽然这很诱人。我什至见过空的日志语句 从代码发出:
log.info("");因为程序员假设行号将是 日志模式,他知道“如果出现空的日志消息 在文件的第 67 行(在 authenticate() 方法中),这意味着 用户已通过身份验证”。此外,记录类名、方法名 和/或行号会对性能产生严重影响。
我试图了解日志记录类名、方法名和行号如何降低性能。
以上情况适用于所有日志框架还是仅适用于其中一些? (作者在同一主题中引用了Logback)。我有兴趣了解在 Log4j 中执行此类操作对性能的影响。
【问题讨论】:
-
对所有框架的性能影响都是一样的,因为获取文件名或行号的唯一方法是获取堆栈跟踪,这很昂贵。你需要一个预编译器或一些神奇的工具,它将这些信息添加到日志记录命令中,我不知道有任何这样的工具(我想,如果有人实现它,这将是一个很好的 Lombok 功能)。跨度>
标签: java performance logging log4j