Log4j и AOP, как получить реальное имя класса

Я реализую регистратор как аспект, используя Spring AOP и Log4J, но я заметил, что имя класса в файле журнала всегда LoggerAspect имя класса, так что... есть ли способ отследить фактическое имя класса в моем журнале?

3 ответа

Решение
@Around("execution(* com.mycontrollerpackage.*.*(..))")
public Object aroundWebMethodE(ProceedingJoinPoint pjp) throws Throwable {      
    String packageName = pjp.getSignature().getDeclaringTypeName();
    String methodName = pjp.getSignature().getName();
    long start = System.currentTimeMillis();
    if(!pjp.getSignature().getName().equals("initBinder")) {
       logger.info("Entering method [" + packageName + "." + methodName +  "]");
    }
    Object output = pjp.proceed();
    long elapsedTime = System.currentTimeMillis() - start;
    if(!methodName.equals("initBinder")) {
       logger.info("Exiting method [" + packageName + "." + methodName + "]; exec time (ms): " + elapsedTime);
    }
    return output;
}

Это проще:

pjp.getTarget().getClass()

Используйте: pjp.getTarget().getClass().getCanonicalName()

Кроме того, чтобы добавить журналы на уровне класса, для которого метод выполняется, вместо этого с помощью средства ведения журнала класса рекомендации, используйте средство ведения журнала уровня класса в методе рекомендации, как показано ниже.

Logger logger = Logger.getLogger(pjp.getTarget().getClass().getCanonicalName());
Другие вопросы по тегам