Springboot强大的日志功能你真的了解吗?这些功能你肯定不知道
ccwgpt 2025-05-21 12:35 3 浏览 0 评论
环境:Springboot2.4.10
日志配置详解
Spring Boot使用Commons Logging记录所有内部日志,但保留底层日志实现的打开状态。为JUL日志记录、Log4J2和Logback提供了默认配置。在每种情况下,记录器都预先配置为使用控制台输出,还可以使用可选的文件输出。
默认情况下,如果使用 “Starters”,则使用Logback进行日志记录。还包括适当的Logback路由,以确保使用JUL日志、Commons Logging、Log4J或SLF4J的依赖库都能正常工作。
Java有很多可用的日志框架。如果上面的列表令人困惑,请不要担心。通常,您不需要更改日志依赖项,Spring Boot默认值也可以正常工作。
1.1 日志格式
Spring Boot的默认日志输出类似于以下示例:
2019-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52
2019-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms
2019-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2019-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, or TRACE (错误、警告、信息、调试或跟踪) 。
- 进程ID。
- 一个---分隔符,用于区分实际日志消息的开始。
- 线程名称:用方括号括起来(控制台输出可能会截断)。
- 记录器名称:这通常是源类名称(通常缩写)。
- 日志消息。
1.2 控制台输出
默认日志配置在写入消息时将消息回显到控制台。默认情况下,会记录错误级别error、警告级别warn和信息级别info的消息。你还可以通过使用--debug标志启动应用程序来启用“debug”模式。
$ java -jar myapp.jar --debug
你还可以在application.properties中指定debug=true。
启用debug模式时,将配置一组核心记录器(嵌入式容器、Hibernate和Spring Boot)以输出更多信息。启用debug模式不会将应用程序配置为使用debug级别记录所有消息。或者,你可以通过使用--trace标志(或application.properties中的trace=true)启动应用程序来启用“trace”模式。这样做可以为一系列核心记录器(嵌入式容器、Hibernate模式生成和整个Spring产品组合)启用跟踪日志记录。
1.3 彩色输出日志
如果终端支持ANSI,则颜色输出用于帮助可读性。可以将
spring.output.ansi.enabled设置为支持的值以覆盖自动检测。
使用%clr转换字配置颜色编码。在最简单的形式中,转换器根据日志级别为输出着色,如下例所示:
%clr(%5p)
下表描述了日志级别到颜色的映射:
Level | Color |
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
具体颜色的配置可以在logback.xml或logback-spring.xml中配置,也可以在application.properties中配置
logging:
pattern:
console: '%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){Green} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'
logback-spring.xml文件配置
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%green(%logger:%line) |%black(%msg%n)</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
1.4 日志输出文件
默认情况下,Spring Boot只将日志记录到控制台,不写入日志文件。如果要在控制台输出之外写入日志文件,则需要设置logging.file.name或logging.file.path属性(例如,在application.properties中)。
下表显示了如何将logging.*属性一起使用:
logging.file.name | logging.file.path | Example | Description |
(none) | (none) | 仅输出到控制台 | |
Specific file | (none) | my.log | 写入指定的日志文件。名称可以是精确的位置,也可以是相对于当前目录的。 |
(none) | Specific directory | /var/log | 将'spring.log'写入指定目录。名称可以是精确的位置,也可以是相对于当前目录的。 |
日志文件在达到10 MB时会旋转,并且与控制台输出一样,默认情况下会记录错误级别、警告级别和信息级别的消息。
注意:logging.file.name与logging.file.path 不能同时出现
示例:
logging:
level:
com.pack: info
web: trace
file:
name: d:/logs/l.log
1.5 日志文件转动/交替
如果使用的是Logback,则可以使用application.properties或application.yaml文件微调日志转动/交替设置。对于所有其他日志系统,你需要自己直接配置转动/交替设置(例如,如果使用Log4J2,则可以添加log4j.xml文件)。
支持以下轮换策略属性:
Name | Description |
logging.logback.rollingpolicy.file-name-pattern | 用于创建日志存档的文件名模式。 |
logging.logback.rollingpolicy.clean-history-on-start | 如果在应用程序启动时应进行日志归档清理。 |
logging.logback.rollingpolicy.max-file-size | 归档前日志文件的最大大小。 |
logging.logback.rollingpolicy.total-size-cap | 删除日志存档文件之前可以接受的最大大小。 |
logging.logback.rollingpolicy.max-history | 保留日志存档的天数(默认为7) |
如下:
logging:
logback:
rollingpolicy:
max-file-size: 2KB
控制日志文件大小,不超过2KB,超过的自动归档(生成压缩包)
1.5 日志级别
所有受支持的日志记录系统都可以通过使用logging.level.<logger name>=<level>在Spring环境中设置记录器级别(例如,在application.properties中),其中级别是跟踪trace、调试debug、信息info、警告warn、错误error、致命fatal或关闭off之一。可以使用logging.level.root配置根日志记录器。
以下示例显示application.properties中的可能的日志记录设置:
logging:
level:
root: "warn"
org.springframework.web: "debug"
org.hibernate: "error"
com.pack: "error"
还可以使用环境变量设置日志记录级别。例如,日志记录
_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG将ORG.SPRINGFRAMEWORK.WEB设置为DEBUG。
1.6 日志分组
能够将相关的记录器分组在一起通常很有用,这样就可以同时对它们进行配置。例如,你可能通常会更改所有Tomcat相关记录器的日志记录级别,但你无法轻松记住顶级软件包。为了帮助实现这一点,SpringBoot允许你在Spring环境中定义日志记录组。例如,你可以通过将“tomcat”组添加到application.properties来定义它:
logging:
group:
tomcat: "org.apache.catalina,org.apache.coyote,org.apache.tomcat" #这里如果配置了会报错,应该还需要配置什么吧。
通过上面的定义后,你可以使用一行更改组中所有记录器的级别:
logging:
level:
tomcat: "trace"
Spring Boot包括以下可开箱即用的预定义日志组:
Name | Loggers |
web | org.springframework.core.codec, org.springframework.http, org.springframework.web, org.springframework.boot.actuate.endpoint.web, org.springframework.boot.web.servlet.ServletContextInitializerBeans |
sql | org.springframework.jdbc.core, org.hibernate.SQL, org.jooq.tools.LoggerListener |
这两个非常有用。
1.7 自定义日志配置
可以通过在类路径上包含适当的库来激活各种日志记录系统,还可以通过在类路径的根目录中或以下Spring环境属性指定的位置提供适当的配置文件来进一步定制:logging.config。
通过使用
org.springframework.Boot.logging.LoggingSystem属性,可以强制Spring引导使用特定的日志系统。该值应该是LoggingSystem实现的完全限定类名。您还可以使用none值完全禁用Spring Boot的日志记录配置。
由于日志记录是在创建ApplicationContext之前初始化的,因此无法从Spring的@Configuration文件中的@PropertySources控制日志记录。更改或完全禁用日志系统的唯一方法是通过系统属性。
根据你的日志记录系统,将加载以下文件:
日志系统 | 定制 |
Logback | logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
如果可能,我们建议您在日志配置中使用-spring变体(例如,logback-spring.xml而不是logback.xml)。如果使用标准配置位置,Spring无法完全控制日志初始化。
为了帮助进行自定义,其他一些属性将从Spring环境传输到系统属性,如下表所述:
Spring Environment | System Property | Comments |
logging.exception-conversion-word | LOG_EXCEPTION_CONVERSION_WORD | 记录异常时使用的转换字。 |
logging.file.name | LOG_FILE | 如果已定义,则在默认日志配置中使用。 |
logging.file.path | LOG_PATH | 如果已定义,则在默认日志配置中使用。 |
logging.pattern.console | CONSOLE_LOG_PATTERN | 要在控制台(stdout)上使用的日志模式。 |
logging.pattern.dateformat | LOG_DATEFORMAT_PATTERN | 日志日期格式的追加器模式。 |
logging.charset.console | CONSOLE_LOG_CHARSET | 用于控制台日志记录的字符集。 |
logging.pattern.file | FILE_LOG_PATTERN | 要在文件中使用的日志模式(如果启用了“日志文件”)。 |
logging.charset.file | FILE_LOG_CHARSET | 用于文件记录的字符集(如果启用了LOG_FILE)。 |
logging.pattern.level | LOG_LEVEL_PATTERN | 呈现日志级别时要使用的格式(默认为%5p)。 |
PID | PID | 当前进程ID(如果可能,在尚未定义为OS环境变量时发现)。 |
上面这些属性(System Property)我们可以在logback-spring.xml文件中直接引用,如下:
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[${PID}] - [${LOG_FILE}] - [${LOG_LEVEL_PATTERN}] %yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-6level) |%green(%logger:%line) |%black(%msg%n)</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
配置logging.pattern.level 属性
logging:
pattern:
level: INFO
输出:
[13036] - [d:/logs/l.log] - [INFO] o[33m2021-09-23 14:34:02o[0;39m |o[34mINFO o[0;39m
如果使用的是Logback,则还会传输以下属性:
Spring Environment | System Property | Comments |
logging.logback.rollingpolicy.file-name-pattern | LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN | 滚动日志文件名的模式 (default ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz). |
logging.logback.rollingpolicy.clean-history-on-start | `LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START | 是否在启动时清理归档日志文件。 |
logging.logback.rollingpolicy.max-file-size | LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE | 最大日志文件大小。 |
logging.logback.rollingpolicy.total-size-cap | LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP | 要保留的日志备份的总大小。 |
logging.logback.rollingpolicy.max-history | `LOGBACK_ROLLINGPOLICY_MAX_HISTORY | 要保留的最大归档日志文件数。 |
所有受支持的日志系统在解析其配置文件时都可以查阅系统属性。有关示例,请参阅spring-boot.jar中的默认配置:
- Logback
- Log4j 2
- Java Util logging
1.8 Logback扩展
Spring Boot包括许多对Logback的扩展,这些扩展可以帮助进行高级配置。你可以在logback-spring.xml配置文件中使用这些扩展名。
因为标准logback.xml配置文件加载得太早,所以不能在其中使用扩展名。您需要使用logback-spring.xml或定义logging.config属性。
1.8.1 配置文件特定配置
<springProfile>标记允许你根据活动的Spring配置文件选择性地包括或排除配置部分。配置文件部分在<configuration>元素中的任何位置都受支持。使用name属性指定接受配置的配置文件。<springProfile>标记可以包含配置文件名称(例如staging)或配置文件表达式。配置文件表达式允许表达更复杂的配置文件逻辑,例如生产 和(central | west)。有关更多详细信息,请参阅参考指南。以下列表显示了三个示例配置文件:
<springProfile name="staging">
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>
<springProfile name="dev | staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>
<springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
1.8.2 环境属性
<springProperty>标记允许你公开Spring环境中的属性,以便在Logback中使用。如果你想从Logback配置中的application.properties文件中访问值,那么这样做很有用。该标记的工作方式与Logback的标准<property>标记类似。但是,你可以指定属性的源(来自环境),而不是指定直接值。如果需要将属性存储在本地范围以外的其他位置,可以使用scope属性。如果需要回退值(在环境中未设置属性的情况下),可以使用defaultValue属性。以下示例显示了如何公开在Logback中使用的属性:
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
<remoteHost>${fluentHost}</remoteHost>
...
</appender>
示例:
配置文件配置自定义属性:
custom:
props:
host: 127.0.0.1
日志文件定义(logback-spring.xml):
<springProperty scope="context" name="host" source="custom.props.host" defaultValue="localhost"/>
日志文件中使用
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[${host}] - [${PID}] - [${LOG_FILE}] - [${LOG_LEVEL_PATTERN}] %yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-6level) |%green(%logger:%line) |%black(%msg%n)</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
测试输出:
[127.0.0.1] - [23188] - [d:/logs/l.log] - [INFO] o[33m2021-09-23 14:46:46o[0;39m |o[34mINFO o[0;39m |
完毕!!!
公众:Springboot实战案例锦集
求个关注
SpringBoot项目使用Prometheus实时监控系统各项指标
Springboot中常见的@Import注解的三种使用方式详解
Springboot启动过程中的这个BeanPostProcessor你知道干什么的吗
SpringBoot整合ElasticSearch详解及相关使用方法
- 上一篇:SpringBoot中14个日志使用技巧
- 下一篇:MyBatis系列-2-日志配置
相关推荐
- SLF4j + Log4j 、Log4j2、 Logback日志框架使用总结
-
从写代码开始,就陆陆续续接触到了许多日志框架,常用的Log4j、Log4j2、Logback等。每次自己写项目时,就copy别人的代码或网上的demo。配置log4j.properties或者lo...
- 轻量级日志追踪方案——TLog
-
TLog概述TLog提供了一种最简单的方式来解决日志追踪问题,它不收集日志,也不需要另外的存储空间,它只是自动的对你的日志进行打标签,自动生成TraceId贯穿你微服务的一整条链路。并且提供上下游节点...
- Java中优雅实现日志记录:Spring AOP秘籍
-
Java中优雅实现日志记录:SpringAOP秘籍在软件开发中,日志记录是一项非常重要的任务。它不仅帮助我们追踪程序执行的过程,还能在出现问题时快速定位错误原因。在Java世界里,Spring框架为...
- Redis与Java整合的最佳实践
-
Redis与Java整合的最佳实践在这个数字化时代,数据处理速度决定了企业的竞争力。Redis作为一款高性能的内存数据库,以其卓越的速度和丰富的数据结构,成为Java开发者的重要伙伴。本文将带你深入了...
- SpringBoot2.x系列教程54--SpringBoot整合日志记录项目重要信息
-
前言我们在进行项目开发时,无论是前端还是后端,都必须进行日志的记录。通过日志,来记录项目开发、运行时产生的各种异常信息和重要数据。这样我们才能对项目的异常进行定位,对项目的后期运营提供数据支撑。但我们...
- Spring Boot中的Logback日志配置详解
-
在SpringBoot开发中,日志作为检查问题、追踪系统、分析系统性能的手段之一,为开发者提供了各种快速解决问题的方案。而在SpringBoot中默认采用的日志框架是LogBack,作为一个功能强...
- MyBatis系列-2-日志配置
-
日积月累,方成大器。各大网站:Mybatis官方技术文档https://mybatis.org/mybatis-3/zh/index.htmlMybatis源码包下载:https://github...
- Springboot强大的日志功能你真的了解吗?这些功能你肯定不知道
-
环境:Springboot2.4.10日志配置详解SpringBoot使用CommonsLogging记录所有内部日志,但保留底层日志实现的打开状态。为JUL日志记录、Log4J2和Logback...
- SpringBoot中14个日志使用技巧
-
前言:日志是软件开发中不可或缺的一部分,它能帮助我们了解应用运行状态、调试问题和监控性能。1.使用SLF4J门面模式统一日志APISLF4J(SimpleLoggingFacadeforJ...
- 探索Java项目中日志系统最佳实践:从入门到精通
-
探索Java项目中日志系统最佳实践:从入门到精通在现代软件开发中,日志系统如同一位默默无闻却至关重要的管家,它记录了程序运行中的各种事件,为我们排查问题、监控性能和优化系统提供了宝贵的依据。在Java...
- # 怎么让 java -jar example.jar 产生的日志输出到指定文件
-
#怎么让java-jarexample.jar产生的日志输出到指定文件要实现java-jarexample.jar命令产生的日志输出到指定文件,可以使用以下几种方法:##一、方法1...
- 探秘Logback:优雅管理Java日志的魔法工具
-
探秘Logback:优雅管理Java日志的魔法工具在Java的世界里,日志记录是每个开发者都绕不开的重要话题。想象一下,如果没有日志,我们的程序就像一辆没有仪表盘的汽车,既看不到速度,也摸不清方向。而...
- SLF4J与Logback:Java日志世界的双子星
-
SLF4J与Logback:Java日志世界的双子星在Java的世界里,日志记录就像空气一样无处不在。无论是调试程序还是排查生产环境的问题,日志都是我们不可或缺的好帮手。而提到日志框架,SLF4J和L...
- SLF4J与Logback:让Java日志记录变得简单优雅
-
SLF4J与Logback:让Java日志记录变得简单优雅在Java开发的世界里,日志记录是一项不可或缺的技术。它不仅帮助我们追踪程序运行的状态,还能在排查问题时提供重要的线索。今天,我们就来聊聊两个...
- 阿里强制使用SLF4J日志框架的缘由
-
背景想必小伙伴们都用过日志,虽然日志看起来可有可无,但是等到出问题的时候,就比较棘手。所以说日志框架使用好不好,规范不规范,直接影响了解决生产环境故障的效率,日志框架选的不好、用的不好,有可能影响环境...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- bootstrap框架 (43)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)