暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

简单入门springboot日志记录

理想Talk 2021-10-27
1289

日志记录

可以参考文档:

Spring Boot 日志配置(超详细)inke的博客-CSDN博客springboot日志

什么是日志记录

记录程序的运行轨迹,方便查找关键信息,也方便快速定位解决问题

Spring Boot 使用 Commons Logging 记录所有内部日志(默认使用,因为底层直接内嵌,引入其他日志框架,要引入jar的麻烦,就直接是默认使用),但开放日志的底层实现,现在主流使用LogBack

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


springboot常用配置日志的框架:

  • java.util.logging:是JDK在1.4版本中引入的Java原生日志框架

  • Log4j:Apache的一个开源项目,可以控制日志信息输送的目的地是控制台、文件、GUI组件等,可以控制每一条日志的输出格式,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。虽然已经停止维护了,但目前绝大部分企业都是用的log4j。

  • LogBack:是Log4j的一个改良版本(最常用)

  • Log4j2:Log4j2已经不仅仅是Log4j的一个升级版本了,它从头到尾都被重写了(常用)

日志输出方式

  • 控制台输出(默认)

  • 日志文件输出(可选)

日志的作用

  • 问题追踪:辅助排查和定位线上问题,优化程序运行性能。

  • 状态监控:通过日志分析,可以监控系统的运行状态。

  • 安全审计:审计主要体现在安全上,可以发现非授权的操作

日志配置

在springboot使用日志,这里可以选择springboot的默认日志格式,也可以自定义配置想要的日志。

日志配置步骤

默认日志配置

  • 直接映入依赖(自定义日志类型则要:引入logging依赖)

  • 安装Lombok插件

  • 使用@Slf4J注解和log变量

  • 配置日志文件输出内容位置

日志配置

默认日志配置情况(引入Thymeleaf依赖)

引入Thymeleaf依赖,使用默认的日志格式

实际开发中我们不需要直接添加该依赖。
你会发现spring-boot-starter其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。工程中有用到了Thymeleaf,而Thymeleaf依赖包含了spring-boot-starter,最终我只要引入Thymeleaf即可。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

自定义日志情况(引入Logging依赖)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

安装Lombok插件

在IDEA中安装Lombok插件

使用注解配置日志

使用@Slf4J注解和log变量

配置日志文件输出位置

配置日志文件输出内容位置

#指定格式化日志内容,只输出日期和内容
logging.pattern.console="%d -%msg%n"
#指定日志输出名和位置
logging.file.path=/var/log/tomcat/sell

指定包名或类名:日志级别

#指定包名或类名:日志级别
logging.level.com.lhw.BlogApplication:debug

#dudu 包下所有class以DEBUG级别输出
logging.level.com.dudu=DEBUG:com.dudu
#root日志以WARN级别输出
logging.level.root=WARN

如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,application.yml可以通过logging.config属性指定自定义的名字

#logging.config属性指定自定义的名字
logging.config=classpath:logging-config.xml

日志格式

SpringBoot默认日志输出格式

日期和时间             日志级别 进程 ID   日志内容                                 日志记录器名称      日志日志内容
2014-03-05 10:57:51.112  INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702  INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]

输出以下格式项:

  • 日期和时间:毫秒精度,易于排序。

  • 日志级别:ERROR、WARN、INFO、DEBUG 或 TRACE。

  • 进程 ID。

  • 一个 --- 分隔符,用于区分实际日志内容的开始。

  • 线程名称:在方括号中(可能会截断控制台输出)。

  • 日志记录器名称:这通常是源类名称(通常为缩写)。

  • 日志内容。

日志等级

常见日志等级

日志等级可以分为5个,从低到高分别是:

  • DEBUG:程序调试bug时使用

  • INFO:程序正常运行时使用

  • WARNING:程序未按预期运行时使用,但并不是错误,如:用户登录密码错误

  • ERROR:程序出错误时使用,如:IO操作失败

  • CRITICAL:特别严重的问题,导致程序不能再继续运行时使用,如:磁盘空间为空,一般很少使用

默认的是WARNING等级:

当在WARNING或WARNING之上等级的才记录日志信息。

日志等级从低到高的顺序是:

DEBUG < INFO < WARNING < ERROR < CRITICAL

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

日志输出

控制台输出日志

默认日志配置会在写入时将消息回显到控制台。默认情况下,会记录 ERROR、WARN 和 INFO 级别的日志。

开启dubug调试模式

方式一:

在运行命令后加入--debug标志

$ java -jar myapp.jar --debug

方式二:

在application.properties中配置debug=true,该属性置为true的时候,核心Logger(包含嵌入式容器、hibernate、spring)会输出更多内容,但是你自己应用的日志并不会输出为DEBUG级别。

日志着色输出

如果您的终端支持 ANSI,则可以使用颜色输出来提高可读性。您可以将 spring.output.ansi.enabled 设置为受支持的值以覆盖自动检测。

可使用 %clr 转换字配置颜色编码。最简单形式是,转换器根据日志级别对输出进行着色,如下所示:

%clr(%5p)

下表描述日志级别与颜色的映射关系:

级别       颜色      
 FATAL    红(Red)  
 ERROR    红(Red)  
 WARN     黄(Yellow)
 INFO     绿(Green)
 DEBUG    绿(Green)
 TRACE    绿(Green)

或者,您可以通过将其作为转换选项指定应使用的颜色或样式。例如,要将文本变为黄色,请使用以下设置:

%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}

支持以下颜色和样式:

  • blue

  • cyan

  • faint

  • green

  • magenta

  • red

  • yellow

日志文件输出

默认情况下,Spring Boot 仅记录到控制台,不会写入日志文件。想除了控制台输出之外还要写入日志文件,则需要设置 logging.file 或 logging.path 属性(例如,在 application.properties 中)。

下表展示了如何与 logging.* 属性一起使用:

logging.file 和 loggin.path

设定日志文件的大小

日志文件在达到 10MB 时会轮转(前会被后覆盖),并且与控制台输出一样,默认情况下会记录 ERROR、WARN 和 INFO 级别的内容。可以使用 logging.file.max-size 属性更改大小限制。除非已设置 logging.file.max-history 属性,否则以前轮转的文件将无限期归档。

日志组

将相关记录器组合在一起以便可以方便同时配置

Spring Boot 包含以下预定义的日志记录组,可以直接使用:

名称      日志记录器                                  
 web       org.springframework.core.codec、org.springframework.httporg.springframework.web
 sql       org.springframework.jdbc.core、org.hibernate.SQL

自定义日志配置

通过在 classpath 中引入适合的库来激活各种日志记录系统,并且可以通过在 classpath 的根目录中或在以下 Spring Environment(上下文) 属性指定的位置提供合适的配置文件来进一步自定义:logging.config(日志配置文件)

各文件系统可以使用的加载文件格式

日志记录系统                    文件                                      
 Logback                   logback-spring.xml、logback-spring.groovy、logback.xml 或者 logback.groovy
 Log4j2                    log4j2-spring.xml 或者 log4j2.xml        
 JDK(Java Util Logging)    logging.properties

规范命名建议

建议您使用 -spring 的形式来配置日志记录(比如 logback-spring.xml 而不是 logback.xml)。如果使用logback.xml这种标准命名格式的配置位置,Spring 无法完全控制日志初始化。


文章转载自理想Talk,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论