一.使用官方推荐的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,直接使用即可
@Slf4jclass LogTest {@Testvoid testLog() {String testInfo = "Free flying flowers are like dreams";log.info("The test info is :{}", testInfo);}}
