Можно ли измерить производительность по времени функций, которые вызываются внутри jar какой-то библиотеки? - PullRequest
2 голосов
/ 17 февраля 2020

Я использую некоторую библиотеку в своем проекте, основанном на Maven. Фляга этой библиотеки может / не может содержать некоторые другие зависимые библиотеки.

Я вызываю xyz функцию этой библиотеки. Существует требование, когда мне нужно проверить время, затрачиваемое каждой из функций, вызываемых внутри функции xyz . Эти функции могут / не могут быть публично доступны.

Есть идеи, как это сделать? Будет ли aspect работать в таком сценарии?

1 Ответ

1 голос
/ 17 февраля 2020

Да, аспекты должны работать. Вот небольшой пример для пружинного пакета

private final Logger log = LoggerFactory.getLogger(this.getClass());


@Pointcut("within(@org.springframework.stereotype.Repository *)")
public void springBeanPointcut() {
}


@Around("springBeanPointcut()")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
    if (log.isDebugEnabled()) {
        log.debug("Enter: {}.{}()",
                joinPoint.getSignature().getDeclaringTypeName(),
                joinPoint.getSignature().getName());
    }
    try {
        Object result = joinPoint.proceed();
        if (log.isDebugEnabled()) {
            log.debug("Exit: {}.{}()",
                    joinPoint.getSignature().getDeclaringTypeName(),
                    joinPoint.getSignature().getName());
        }
        return result;
    } catch (IllegalArgumentException e) {
        log.error("Error:{}.{}()",
                joinPoint.getSignature().getDeclaringTypeName(),
                joinPoint.getSignature().getName());

        throw e;
    }
}

Настройте формат своего регистратора для регистрации журнала миллисекундного времени или просто поместите свой логический файл c, чтобы вычислить необходимое время.

...