gpt4 book ai didi

java - 记录复杂性和对 MessageFormat 性能的关注

转载 作者:行者123 更新时间:2023-11-30 07:39:23 25 4
gpt4 key购买 nike

我的应用程序使用 log4j 进行日志记录,通常我通过检查是否启用特定级别来进行日志记录,然后像下面这样记录

if(Logger.isApplicationDebugEnabled()){
Logger.logApplicationDebug("something"+values);
}

现在这个 if 检查减少了我们在 jUnit 测试期间的分支覆盖率。为了克服这个问题,我的 friend 建议去掉日志记录的“if”检查。

  1. 我的第一个 friend 建议删除 if 检查并直接登录。这种方法的问题是它可能会由于形成无论如何都不会在日志文件中结束的字符串而减慢应用程序。
  2. 我想到的第二种方法与 SLF4j 非常相似。

    Logger.debug("编号 {0},日期为 {1,date}",1234, new Date());

这感觉非常有吸引力和简单。(这个解决方案内部使用 MessageFormat.format(str, object[]) 方法。但我担心它可能具有的性能。另请注意,'Logger' 是我的内部实用程序类和在它的每个日志方法中,都有一个日志启用的检查。你们有什么建议?我浏览了速度模板,但它需要参数图。是否有仅根据参数索引位置替换值的轻量级解决方案,或者该解决方案是否可行?

最佳答案

好吧,我会问一个明显的问题:为什么不在运行单元测试时只启用调试日志记录——或者真正的所有级别?这具有增加代码覆盖率测试和测试日志中问题的优势(这远非不可能)。

检查是否启用日志记录是有原因的:不仅构造最终日志字符串而且构造各个参数本身的成本可能很高(在大循环内)。使用 MessageFormat 或 java.util.Formatter 或其他任何方法都无法解决第二个问题。我真的鼓励您保留支票。

关于java - 记录复杂性和对 MessageFormat 性能的关注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/680582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com