springboot中日志的使用

最近做项目时用到了@Slf4j输出SpringBoot中的日志,只知道这样会很方便,直接log输出自己想要输出的日志,一直不太明白里面的运行机制,有困惑就想解决掉,今天查找了一些资料,总算明白了一些,下面记录一下,分享给大家,希望能减少困惑,有所帮助。

 

进行项目开发时,日志的作用是绝对不可忽略的。记录好日志,是排除bug的良药。
在日志输出时,建议不要使用System.out.println() 输出日志信息,此种方法会增加资源的消耗且灵活性比较弱,不方便进行日志等级的控制,有时会干扰正常的日志输出。

 

Spring Boot 为 Java Util Logging,Log4J2 和 Logback 提供了默认配置。每个日志框架,都默认配置了控制台输出,并且还提供了日志文件输出功能。

如果你使用 Spring Boot 的 Starters,那么默认使用的日志框架是 Logback。Spring Boot 底层也对 Java Util Logging,Commons Logging,Log4J 或 SLF4J 日志框架进行了适配。因此只要进行相关的设置,就可以实现日志框架的切换。

提供了这么多日志框架,应该选择哪一个呢?不用担心,在不修改任何日志依赖项的时候,Spring Boot 的日志框架就可以正常运行。

虽然 Spring Boot 适配了多种日志框架,一般情况下,我们不会切换掉 Logback,因为 Logback 相对于其他的日志框架速度更快,占用内存更少。

 

下面我么你来看一下springboot官方文档中Logging介绍

简而言之,对于springboot来说,有很多日志框架可用。如果上面的列表看起来很混乱,请不要担心。通常,您不需要更改日志记录依赖项,而springboot默认设置工作正常。

 

日志格式

默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。

从上图可以看到,日志输出内容元素具体如下:

时间日期:精确到毫秒
日志级别:ERROR, WARN, INFO, DEBUG or TRACE
进程ID
分隔符:— 标识实际日志的开始
线程名:方括号括起来(可能会截断控制台输出)
Logger名:通常使用源代码的类名
日志内容

       时间日期:精确到毫秒

       日志级别:ERROR, WARN, INFO, DEBUG or TRACE

       进程ID

       分隔符:— 标识实际日志的开始

       线程名:方括号括起来(可能会截断控制台输出)

       Logger名:通常使用源代码的类名

       日志内容

 

添加日志依赖

spring-boot-starter 其中包含了 spring-boot-starter-logging ,该依赖内容就是 Spring Boot 默认的日志框架 logback,所以实际开发中我们不需要直接添加该依赖。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-logging</artifactId>
  <version>2.1.6.RELEASE</version>
  <scope>compile</scope>
</dependency>

Logback使用到的jar包主要是下面三个:

控制台输出

日志级别从低到高分为:

TRACE < DEBUG < INFO < WARN < ERROR < FATAL

如果设置为 WARN ,则低于 WARN 的信息都不会输出。Spring Boot 中默认配置 ERROR 、 WARN 和 INFO 级别的日志输出到控制台。

同时还可以通过启动您的应用程序 --debug 标志来启用“调试”模式(开发的时候推荐开启),以下两种方式皆可:在运行命令后加入 --debug 标志,如: $ java -jar springTest.jar –debug,或者在 application.properties 中配置 debug=true ,该属性置为 true 的时候,核心 Logger (包含嵌入式容器、hibernate、spring)会输出更多内容,但是你 自己应用的日志并不会输出为 DEBUG 级别 。

 

使用方法

private final Logger log= LoggerFactory.getLogger(LoggerController.class);

或者,更简洁方式是,使用Lombok

引入jar包

<dependency>

    <groupId>org.projectlombok</groupId>

    <artifactId>lombok</artifactId>

    <version>1.16.18</version>

</dependency>

然后就可以直接使用log来打印日志,而不需要定义全局日志变量

 

 

 

日志输出文件

默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件。

使用 Spring Boot 喜欢在 application.properties 或 application.yml 配置,这样只能配置简单的场景,保存路径、日志格式等,复杂的场景(区分 info 和 error 的日志、每天产生一个日志文件等)满足不了,只能自定义配置,下面会演示。

logging:

  pattern:

    #格式化,只能输出日期和内容

    console: "%d - %msg%n"

  #        配置日志输出位置

  path: D:/

  #      配置日志输出文件 ,指定文件名

  file: D:/test.log

如果要编写除控制台输出之外的日志文件,则需在 application.properties 中设置 logging.file 或 logging.path 属性。

logging.file ,设置文件,可以是绝对路径,也可以是相对路径。如: logging.file=my.log。

logging.path ,设置目录,会在该目录下创建 spring.log 文件,并写入日志内容,如: logging.path=/var/log

如果只配置 logging.file ,会在项目的当前路径下生成一个 xxx.log 日志文件。

如果只配置 logging.path ,在 /var/log 文件夹生成一个日志文件为 spring.log

 

注:二者不能同时使用,如若同时使用,则只有 logging.file 生效

默认情况下,日志文件的大小达到 10MB 时会切分一次,产生新的日志文件,默认级别为: ERROR、WARN、INFO

复杂的场景需编写配置文件logback-spring.xml,在里面可以满足生产级别的要求。

Springboot官网上有着详细的关于配置日志输出的讲解,遇到问题我们要学会查找官方文档,以官方那个文档为主,配置适合自己程序的日志输出。关于日志部分springboot的官网链接:

https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-logging.html

 

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页