2016-04-14 128 views
0

我正在开发春季应用程序,我正在使用log4j2来登录我的应用程序。 我认为使用apsect并在每个函数(周围)中写入tol日志,所以现在我将在app中的每个函数中记录大量日志。对于更改为myy的应用程序的性能有任何影响所以现在我会有很多io日志?方面使用log4j2性能问题

@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; 
    } 
} 

回答

0

如果您使用,应该没有太大的影响。但是,你可能应该用JMH或者在探查器中用眼睛来衡量它。然而,在那个精确度的水平上,所以拿着一粒盐来取结果。

通常,log4j 2参数化消息样式log("value1={}, val2={}", val1, val2)比StringFormat样式快,并且记录简单字符串的速度最快。

顺便说一句,你不应该使用System.nanoTime()而不是currentTimeMillis()?如果该代码需要超过一毫秒,则存在问题。如果您遵循上述建议,日志记录将需要大约500纳秒或更少。

+0

所以它可以使用这方面的方法,并记录所有我的应用程序功能之前和之后? – guy

+0

你想为你的应用程序中的_every_方法做到这一点?这可能会对性能产生影响,因为在如此高的持续记录速率下,缓冲区将被填满,并且您的应用程序最终会以尽可能快的速度运行......但请试着去看看... –

+0

那么,它是如何发展的?我的回答有用吗? –