1.日志框架有哪些?

常见的日志框架有log4j、logback、log4j2。

log4j这个日志框架显示是耳熟能详了,在Spring开发中是经常使用,但是据说log4j官方已经不再更新了,而且在性能上比logback、log4j2差了很多。

logback是由log4j创始人设计的另外一个开源日志框架,logback相比之于log4j性能提升了10以上,初始化内存加载也更小了。作为的Spring Boot默认的日志框架肯定是有着不小的优势。

log4j2晚于logback推出,官网介绍性能比logback高,但谁知道是不是王婆卖瓜自卖自夸,坊间流传,log4j2在很多思想理念上都是照抄logback,因此即便log4j2是Apache官方项目,Spring等许多框架项目没有将它纳入主流

slf4j:simple log facade for java,译为简单日志门面。官方介绍为,SLF4J作为各种日志系统的简单Facade或抽象,允许最终用户在部署时插入所需的日志框架。

总结:slf4j是通用的接口规范,log4j、logback、log4j2是具体实现的日志插件。

Spring Boot 默认使用 SLF4J+Logback 记录日志,并提供了默认配置,即使我们不进行任何额外配,也可以使用 SLF4J+Logback 进行日志输出。

2.日志级别

几种常见的日志级别由低到高分为:TRACE < DEBUG < INFO < WARN < ERROR < FATAL。如何理解这个日志级别呢?很简单,如果项目中的日志级别设置为INFO,那么比它更低级别的日志信息就看不到了,即是TRACE、DEBUG日志将会不显示。

3.日志如何使用以及输出

在业务中肯定需要追溯日志,那么如何在自己的业务中输出日志呢?其实常用的有两种方式,下面一一介绍。

第一种其实也是很早之前常用的一种方式,只需要在代码添加如下:

private final Logger logger= LoggerFactory.getLogger(DemoApplicationTests.class);

这种方式显然比较鸡肋,如果每个类中都添加一下岂不是很low。别着急,lombok为我们解决了这个难题。

要想使用lombok,需要添加如下依赖:

                    org.projectlombok            lombok        

使用也是很简单,只需要在类上标注一个注解@Slf4j即可,如下:

如何定制日志级别?

Spring Boot中默认的日志级别是INFO,但是可以自己定制日志级别,如下:

logging.level.root=DEBUG

日志如何输出到文件中?

Spring Boot中日志默认是输出到控制台的,但是在生产环境中显示不可行的,因此需要配置日志输出到日志文件中。

其中有两个重要配置如下:

  1. logging.file.path:指定日志文件的路径

  2. logging.file.name:日志的文件名,默认为spring.log

注意:官方文档说这两个属性不能同时配置,否则不生效,因此只需要配置一个即可。

指定输出的文件为当前项目路径的logs文件下,默认生成的日志文件为spring.log,如下:

logging:  file:    path: /logs

日志文件中还有一些其他的属性,比如日志文件的最大size,保留几天的日志等等,因此可以自定义日志文件的配置文件

Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置。因此只需要在src/resources文件夹下创建logback-spring.xml即可,Springboot在启动可直接扫描,配置文件内容如下:

                                                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n                                                    ${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}                        30                                        %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n                                    10MB                 show parameters for hibernate sql 专为 Hibernate 定制