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().getCanonicalName()
Кроме того, чтобы добавить журналы на уровне класса, для которого метод выполняется, вместо этого с помощью средства ведения журнала класса рекомендации, используйте средство ведения журнала уровня класса в методе рекомендации, как показано ниже.
Logger logger = Logger.getLogger(pjp.getTarget().getClass().getCanonicalName());