作者回复: log4j2 API,并不是log4j
你在ch.qos.logback.classic.Logger.buildLoggingEventAndAppend设一个断点看一下整个过程就知道了,或者直接访问 https://github.com/JosephZhu1983/java-common-mistakes/blob/master/src/main/java/org/geekbang/time/commonmistakes/logging/placeholder/log4j2api_to_slf4j_to_logack.jpg 查看
作者回复: 这个实现可以,我也更新了一个自定义Filter的例子
https://github.com/JosephZhu1983/java-common-mistakes/blob/master/src/main/java/org/geekbang/time/commonmistakes/logging/duplicate/multiplelevelsfilter.xml
作者回复: @Log4j
Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2
Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@Log4j2和@Slf4j只是日志记录API,和实际日志记录框架没有关系,可以再看看文章一开始说的那段有关SLF4J结构的内容
作者回复: 是的,相关信息参考 https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-logback-extensions
作者回复: 1. 取决于你们是否希望针对不同的日志级别有不同的归档策略等等
2. 一般都会用ELK搜索,不会有这个问题
3. 你认为请求和响应属于开发用的调试信息那么放入debug,生产不开启debug,如果认为是用于审计等,那么放入info,我不好判断你的需求是什么
作者回复: :)
作者回复: 因为是info级别的时候就无需浪费时间去获取debug日志需要的参数了
作者回复: 是
作者回复: 可能和CustomLogFilter有关系
作者回复: 贴下完整配置
作者回复: mvn dependency:tree
作者回复: 传入的是Object,那么log.debug传入的是Object,只有输出日志的时候才会toString,如果你在toString里面打印了东西来判断是否有效果,就是这样的
作者回复: 😀