如何在 java class 中使用 logback 为特定 class 和方法实现不同的记录器模式?
How to implement different logger pattern for specific class and methods using logback in java class?
基本aop代码
@Aspect
public class LoggingAspect {
private Logger logger ;
@Before("execution(* *(..)) && !execution(* com.*model*.*(..))")
public void logBefore(JoinPoint joinPoint) {
logger = LoggerFactory.getLogger(joinPoint.getTarget().getClass());
logger.info("{} :" + joinPoint.getSignature().getName(),"info for user log" );
//logger.info("hijacked target class : " + joinPoint.getTarget().getClass().getSimpleName() );
}
@After("execution(* *(..)) && !execution(* com.*model*.*(..)) ")
public void logAfter(JoinPoint joinPoint) {
System.out.println("logAfter() is running!");
System.out.println("hijacked : " + joinPoint.getSignature().getName());
System.out.println("******");
}
}
目前,我正在默认为一些方法实现 aop 日志记录,例如 methods starts 和 methods end 。所以使用 aop logger 打印 apo class 和方法而不是打印拥有的方法 class 和方法。我必须重写 aop 中的 class 名称来打印该方法的 class 名称,所以我需要将方法名称作为本机方法名称
目前我得到
2017-09-20 18:32:06 INFO [main] c.m.customer.bo.impl.CustomerBoImpl - logBefore : info for user log() :addCustomer
我需要的是
2017-09-20 18:32:06 INFO [main] c.m.customer.bo.impl.CustomerBoImpl - addCustomer
: info for user log() :addCustomer
最后,我从这个 link 中找到了一个使用 ProceedingJoinPoint 的简单解决方案
Log4j and AOP, how to get actual class name
基本aop代码
@Aspect
public class LoggingAspect {
private Logger logger ;
@Before("execution(* *(..)) && !execution(* com.*model*.*(..))")
public void logBefore(JoinPoint joinPoint) {
logger = LoggerFactory.getLogger(joinPoint.getTarget().getClass());
logger.info("{} :" + joinPoint.getSignature().getName(),"info for user log" );
//logger.info("hijacked target class : " + joinPoint.getTarget().getClass().getSimpleName() );
}
@After("execution(* *(..)) && !execution(* com.*model*.*(..)) ")
public void logAfter(JoinPoint joinPoint) {
System.out.println("logAfter() is running!");
System.out.println("hijacked : " + joinPoint.getSignature().getName());
System.out.println("******");
}
}
目前,我正在默认为一些方法实现 aop 日志记录,例如 methods starts 和 methods end 。所以使用 aop logger 打印 apo class 和方法而不是打印拥有的方法 class 和方法。我必须重写 aop 中的 class 名称来打印该方法的 class 名称,所以我需要将方法名称作为本机方法名称
目前我得到
2017-09-20 18:32:06 INFO [main] c.m.customer.bo.impl.CustomerBoImpl - logBefore : info for user log() :addCustomer
我需要的是
2017-09-20 18:32:06 INFO [main] c.m.customer.bo.impl.CustomerBoImpl - addCustomer : info for user log() :addCustomer
最后,我从这个 link 中找到了一个使用 ProceedingJoinPoint 的简单解决方案 Log4j and AOP, how to get actual class name