Java 使用log4j2的方面性能问题

Java 使用log4j2的方面性能问题,java,Java,我正在开发spring应用程序,并使用log4j2记录我的应用程序。 我考虑使用APSECT并在每一个函数(Outlook)中编写ToLlog,所以现在我将在App.Apple中的每个函数中都有很多日志。在Myy应用程序的性能改变之后会有什么影响,所以现在我将有很多IO日志? @Aspect public class MethodLogger { @Around("execution(* *(..)) && @annotation(Loggable)") public O

我正在开发spring应用程序,并使用log4j2记录我的应用程序。 我考虑使用APSECT并在每一个函数(Outlook)中编写ToLlog,所以现在我将在App.Apple中的每个函数中都有很多日志。在Myy应用程序的性能改变之后会有什么影响,所以现在我将有很多IO日志?

@Aspect
public class MethodLogger {
  @Around("execution(* *(..)) && @annotation(Loggable)")
  public Object around(ProceedingJoinPoint point) {
    long start = System.currentTimeMillis();
    Object result = point.proceed();
    Logger.info(
      "#%s(%s): %s in %[msec]s",
      MethodSignature.class.cast(point.getSignature()).getMethod().getName(),
      point.getArgs(),
      result,
      System.currentTimeMillis() - start
    );
    return result;
  }
}

如果你使用,应该不会有太大的影响。但是,您可能应该自己或通过在探查器中观察来测量这一点。然而,在这样的精度水平下,对结果持怀疑态度

通常,log4j2参数化消息样式
log(“value1={},val2={}”,val1,val2)
比StringFormat样式快,而记录简单字符串的速度最快


顺便问一下,您是否应该使用
System.nanoTime()
而不是
currentTimeMillis()
?如果该代码花费的时间超过一毫秒,则会出现问题。如果您遵循上述建议,日志记录将花费大约500纳秒或更少的时间

所以可以使用此aspect方法并在前后记录我的所有应用程序功能吗?你想对应用程序中的每个方法都这样做吗?这可能会对性能产生影响,因为在如此高的持续日志记录率下,缓冲区将被填满,而你的应用程序将以你所能记录的速度运行。。。但是试着看看……那么,事情进展如何?我的回答有用吗?