Java Log4j性能方面的%F与getClass()的比较。getSimpleName()

Java Log4j性能方面的%F与getClass()的比较。getSimpleName(),java,log4j,Java,Log4j,从性能角度看,在日志中包含类名时最好使用什么?在模式布局中,它在文档中为%F提供了一个警告,说明: 用于输出发出日志记录请求的文件名。 警告:生成调用方位置信息的速度非常慢,除非执行速度不是问题,否则应避免此操作。要获取类名log4j,请执行类似的调用 String className = new Throwable().getStackTrace()[3].getClassName(); 正如你所看到的,为了一个简单的结果,这做了很多工作。使用getClass().getSimpleName

从性能角度看,在日志中包含类名时最好使用什么?在模式布局中,它在文档中为%F提供了一个警告,说明:

用于输出发出日志记录请求的文件名。

警告:生成调用方位置信息的速度非常慢,除非执行速度不是问题,否则应避免此操作。

要获取类名log4j,请执行类似的调用

String className = new Throwable().getStackTrace()[3].getClassName();
正如你所看到的,为了一个简单的结果,这做了很多工作。使用getClass().getSimpleName()相对来说效率更高,但如果可以缓存它,效果会更好

HotSpot内部有这个方法,我相信它并没有被使用,因为它只是内部使用。嗯,如果它能检测到这是否可用,并在可用的情况下使用它会更好

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

要获取类名log4j,可以调用类似这样的调用

String className = new Throwable().getStackTrace()[3].getClassName();
正如你所看到的,为了一个简单的结果,这做了很多工作。使用getClass().getSimpleName()相对来说效率更高,但如果可以缓存它,效果会更好

HotSpot内部有这个方法,我相信它并没有被使用,因为它只是内部使用。嗯,如果它能检测到这是否可用,并在可用的情况下使用它会更好

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

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

创建记录器,感谢您的解释和建议!:)我觉得效率更高,但不确定。谢谢你的解释和建议!:)我认为它更有效,但不确定。