一.使用官方推荐的LoggerFactory

  1. public class Demo{
  2. private final static Logger logger = LoggerFactory.getLogger(XXX.class);
  3. }

二.使用Spring的bean后置处理器BeanPostProcessor

源码:

  1. public interface BeanPostProcessor {
  2. Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
  3. Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
  4. }

BeanPostProcessor也称为Bean后置处理器,它是Spring中定义的接口,在Spring容器的创建过程中(具体为Bean初始化前后)会回调BeanPostProcessor中定义的两个方法。

  • postProcess**Before**Initialization方法会在每一个bean对象的初始化方法调用之前回调
  • postProcess**After**Initialization方法会在每个bean对象的初始化方法调用之后被回调

添加自定义注解@Slf4j,指定为运行时有效,作用域为field字段

  1. @Retention(RetentionPolicy.RUNTIME)
  2. @Target(ElementType.FIELD)
  3. public @interface Slf4j {
  4. /**
  5. * logger 名称
  6. * @return
  7. */
  8. public String name() default "";
  9. }

可以在postProcess**Before**Initialization中利用ReflectionUtils._doWithFields()方法,_setAccessible后,对Field进行判断,如果字段上有@Slf4j ,则LoggerFactory.getLogger(XXX.class)获取loger对象,然后赋值给成员变量log

三.使用lombok的自带注解

lombok提供@Slf4j注解支持,可以在编译时添加成员变量log,直接使用即可

  1. @Slf4j
  2. class LogTest {
  3. @Test
  4. void testLog() {
  5. String testInfo = "Free flying flowers are like dreams";
  6. log.info("The test info is :{}", testInfo);
  7. }
  8. }