市场上的日志框架
日志门面(日志抽象层) | 日志实现 |
---|---|
JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for Java)、jboss-logging | Log4j、JUL(Java.util.logging)、Log4j2、Logback |
- Log4j、Logback 、SLF4j都是出自同一个人的手,Logback时Log4j的升级版
- 建议使用SLF4j+Logback的组合作为日志框架
- Springboot底层使用的是SLF4j+Logback的组合
SLF4j
- 开发的时候应该调用日志的抽象层(SLF4j),不应该使用日志的实现层(Logback),当然也可以使用其他实现层,SLF4j与其他的实现层的关系在slf4j的官网(http://slf4j.org/manual.html)上有一张图
- 使用
public class SLF4jTest {
public static void main(String[] args){
Logger logger = LoggerFactory.getLogger(SLF4jTest.class);
logger.info("测试------");
}
}
同一个系统统一日志框架
在一个系统中,可以能引入很多的jar包,如:mybatis、Spring等等,但是他们底层使用的日志框架不一样,这个要怎么解决呢?
在sfl4j的官网(http://slf4j.org/legacy.html)上也能找到解决方案:
我们只要使用对应的日志jar包替换掉其他框架的日志jar包,就可以达到这个效果,打个比方:
如果mybatis中使用的是Commons logging API,我们要替换掉这个jar包,首先就得排除掉这个jar包,然后引入jcl-over-slf4j.jar的包,其实jcl-over-slf4j中会包含Commons logging API中的所有类以及方法,只是实现不一样
sfl4j Springboot配置
- logging.level.com.example=info
com.example包下的,只要是info级别以上的日志都输出 - logging.path=/var/log
指定日志输出在/var/log的目录下 - logging.file=D:\my.log
指定日志输出到my.log的日志文件下 - logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
控制台输出的日志的格式 - logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
指定文件中输出的日志的格式
替换日志框架
先看一张图(通过pom文件右键 —> Diagrams —> Show Dependencies查看)
这张图是我现在的Springboot的依赖图,然后我要怎么做呢?
分析:
- 这里是用slf4j作为抽象层,logback作为实现层 (可以看前面的图片确定)
- 这里将log4j的api通过log4j-to-slf4j封装成了slf4j
如果要将logback替换掉,那就需要先将logback的依赖移除,然后依然使用slf4j作为抽象层的话,就不要移除slf4j,然后引入对应的中间包
,这样即可完成替换