一.使用官方推荐的LoggerFactory
public class Demo{
private final static Logger logger = LoggerFactory.getLogger(XXX.class);
}
二.使用Spring的bean后置处理器BeanPostProcessor
源码:
public interface BeanPostProcessor {
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}
BeanPostProcessor也称为Bean后置处理器,它是Spring中定义的接口,在Spring容器的创建过程中(具体为Bean初始化前后)会回调BeanPostProcessor中定义的两个方法。
- postProcess**Before**Initialization方法会在每一个bean对象的初始化方法调用之前回调
- postProcess**After**Initialization方法会在每个bean对象的初始化方法调用之后被回调
添加自定义注解@Slf4j,指定为运行时有效,作用域为field字段
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Slf4j {
/**
* logger 名称
* @return
*/
public String name() default "";
}
可以在postProcess**Before**Initialization中利用ReflectionUtils._doWithFields()方法,_setAccessible后,对Field进行判断,如果字段上有@Slf4j ,则LoggerFactory.getLogger(XXX.class)获取loger对象,然后赋值给成员变量log
三.使用lombok的自带注解
lombok提供@Slf4j注解支持,可以在编译时添加成员变量log,直接使用即可
@Slf4j
class LogTest {
@Test
void testLog() {
String testInfo = "Free flying flowers are like dreams";
log.info("The test info is :{}", testInfo);
}
}