【问题标题】:Log4j Performance Wise %F vs getClass().getSimpleName()Log4j 性能明智 %F 与 getClass().getSimpleName()
【发布时间】:2012-12-04 12:49:30
【问题描述】:

为了提高性能,最好在日志中包含类名?在模式布局中,它在 %F 的文档中给出警告:

用于输出发出记录请求的文件名。
警告生成调用方位置信息非常慢,除非执行速度不是问题,否则应避免生成调用方位置信息。

【问题讨论】:

    标签: java log4j


    【解决方案1】:

    要获取类名 log4j 进行类似的调用。

    String className = new Throwable().getStackTrace()[3].getClassName();
    

    如您所见,这为一个简单的结果做了很多工作。使用 getClass().getSimpleName() 相对效率更高,但如果你能缓存它会更好。

    HotSpot 内部有这种方法,我相信它没有被使用,因为它仅供内部使用。恕我直言,如果它检测到它是否可用并在可用时使用它会更好。

    Class class = sun.reflect.Reflection.getCallerClass(int stackDepth);
    

    【讨论】:

    • 感谢您的解释和建议! :) 我认为它更有效,但不确定。
    【解决方案2】:

    %F %M %L 是通过 Java 中的反射或堆栈回溯实现的,因此这并没有您期望的那么快。我建议对课程使用固定名称。例如,使用class.getName() 创建记录器。

    【讨论】:

      猜你喜欢
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      相关资源
      最近更新 更多