2016-04-14 28 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

那麼,它是如何發展的?我的回答有用嗎? –