1

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

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

4

2 回答 2

1

要获取 className log4j,请拨打类似的电话。

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

正如你所看到的,这为一个简单的结果做了很多工作。使用 getClass().getSimpleName() 相对更有效,但如果你可以缓存它会更好。

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

Class class = sun.reflect.Reflection.getCallerClass(int stackDepth);
于 2012-12-04T12:52:32.853 回答
0

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

于 2012-12-04T12:54:34.193 回答