Log4j Performance Wise%F vs getClass()。getSimpleName()

时间:2012-12-04 12:49:30

标签: java log4j

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

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

2 个答案:

答案 0 :(得分:1)

要获取className,log4j会调用类似。

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

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

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

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

答案 1 :(得分:0)

%F %M %L是通过Java中的反射或堆栈回溯来实现的,所以这并不是你想象的那么快。我推荐使用固定名称作为课程。例如,使用class.getName()创建记录器。