Spring boot日志配置

前言

Spring Boot 底层默认使用 slf4j 和 logback 的方式记录日志。工程中依赖了 spring-boot-starter-web,它又依赖了 spring-boot-starter-logging,所以不需要再手动添加该依赖。在 Spring Boot 中,application.yml 支持部分 logback 的日志配置,但一些高级配置只能通过独立的 xml 配置文件实现,经过 Spring Boot 的整合后,可支持多环境配置,但 logback 配置文件需要命名为 logback-spring.xml。如果使用了自定义日志配置文件,application.yml中 logging 有关配置就会失效。

springboot 默认的 logback 配置

SpringBoot 默认提供了一套 logback 的配置文件,位于 spring-boot依赖中的 org/springframework/boot/logging/logback/base.xml。

<included><include resource="org/springframework/boot/logging/logback/defaults.xml" /><property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/><include resource="org/springframework/boot/logging/logback/console-appender.xml" /><include resource="org/springframework/boot/logging/logback/file-appender.xml" /><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE" /></root>
</included>

该文件引入了三个 xml 文件,并设置了root的日志级别为 info。console-appender.xml 和 file-appender.xml 中定义了日志的追加器,分别是名为 CONSOLE 的控制台追加器 和 名为 FILE 的文件追加器。org/springframework/boot/logging/logback/defaults.xml 定义了 logback 的转换器、一些包的日志级别、日志显示格式。

<included><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /><conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /><conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /><property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %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}}"/><property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender"><destinationLogger>org.springframework.boot</destinationLogger></appender><logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/><logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/><logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/><logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/><logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/><logger name="org.crsh.plugin" level="WARN"/><logger name="org.crsh.ssh" level="WARN"/><logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/><logger name="org.hibernate.validator.internal.util.Version" level="WARN"/><logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="WARN"/><logger name="org.springframework.boot.actuate.endpoint.jmx" additivity="false"><appender-ref ref="DEBUG_LEVEL_REMAPPER"/></logger><logger name="org.thymeleaf" additivity="false"><appender-ref ref="DEBUG_LEVEL_REMAPPER"/></logger>
</included>

默认在控制台中显示彩色日志,就是因为使用了转换器 ColorConverter,显示的格式为 CONSOLE_LOG_PATTERN 中使用了该转换器。在我们的自定义配置中可以复用这个 default.xml 和 console-appender.xml。

自定义配置

在 src/main/resources/下创建配置文件 logback-spring.xml。

<?xml version="1.0" encoding="UTF-8"?>
<configuration><include resource="org/springframework/boot/logging/logback/defaults.xml" /><include resource="org/springframework/boot/logging/logback/console-appender.xml" /><root level="INFO"><appender-ref ref="CONSOLE" /></root>
</configuration>

上面的配置引入了 spring boot 中 logback 的默认配置和 CONSOLE 追加器,并定义了 root 的日志级别为 info。

日志级别

日志有五个级别:trace、debug、info、warn、error,级别依次较高,配置了某个级别,就会输出该级别及其以上的级别。如,配置日志级别为 warn,则日志会输出 warn、error;如果配置日志级别为 debug,则会输出 debug、info、warn、error。

   @RequestMapping(value = "/testLogLevel", method = RequestMethod.GET)public String testLogLevel() {LOGGER.trace("hello,爱琴孩!");LOGGER.debug("hello,爱琴孩!");LOGGER.info("hello,爱琴孩!");LOGGER.warn("hello,爱琴孩!");LOGGER.error("hello,爱琴孩!");return "Success";}

注意,引入的 Logger 和 LoggerFactory 两个类都是 slf4j 包下面的。上面的代码分别输出五个级别的日志。启动服务,访问 testLogLevel接口,控制台输出:

 控制台值输出 info、warn、error,可以看出 SpringBoot 默认输出级别为 info。可通过配置细粒度调整日志的级别:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>...<logger name="com.example.study.controller" level="trace" additivity="false"><appender-ref ref="CONSOLE"/></logger>...
</configuration>

上面按照包名更改了日志的显示级别,com.example.study.controller 包下面的日志都是 trace 级别。上面配置选项"additivity",用于控制日志消息在日志层级之间的传播方式。在Logback中,每个日志记录器(logger)都有一个与之关联的层级(level)。当日志消息到达一个日志记录器时,Logback会将其传播到所有具有相同或更高层级的日志记录器。默认情况下,Logback将日志消息传播到所有父级日志记录器。"additivity"的值可以是true或false。当"additivity"设置为true时,日志消息将被传播到所有父级日志记录器;当"additivity"设置为false时,日志消息将仅停留在当前日志记录器中,不会传播到父级日志记录器。通过配置"additivity",可以更细粒度地控制日志消息在应用程序中的流动,避免在特定的日志记录器中重复记录日志消息,也可以提高日志记录的性能。

重新访问 testLogLevel接口,error、warn、info、debug、trace 都会全部打印出来。

文件追加器

上面复用了 SpringBoot 自带的控制台追加器 CONSOLE,这里自定义文件追加器:

    <appender name="ServiceLogRollingFileAppender"class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_FILE}</file><encoder><pattern>${FILE_LOG_PATTERN}</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log</fileNamePattern></rollingPolicy></appender>

并在 root 中添加这个自定义 ServiceLogRollingFileAppender追加器:

<root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="ServiceLogRollingFileAppender" />
</root>

 多环境日志

假设希望在 local 时,只输出控制台日志;在其他环境(dev、test等)输出控制台日志和文件日志。SpringBoot 提供了 springProfile 标签,通过该元素 name 属性指定环境。修改 root 元素:

<root level="INFO"><springProfile name="local"><appender-ref ref="CONSOLE" /></springProfile><springProfile name="!local"><appender-ref ref="CONSOLE" /><appender-ref ref="ServiceLogRollingFileAppender" /></springProfile>
</root>

分别使用 local 和 dev 启动服务,测试多环境是否生效。我们自定义的 logback-spring.xml 充分利用了 Spring Boot 官方提供的配置,最终完整配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration><include resource="org/springframework/boot/logging/logback/defaults.xml" /><springProperty scop="context" name="LOG_SERVICE_NAME"  source="logging.service.name" /><property name="CONSOLE_LOG_PATTERN"value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_SERVICE_NAME}){faint} %clr(${PID:- }){magenta} %clr([%15.15t]){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(%-40.40class{39} %5.5L){cyan}%clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" /><property name="FILE_LOG_PATTERN"value="%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_SERVICE_NAME:-%5p} ${PID:- } [%t] ${LOG_LEVEL_PATTERN:-%5p} %-40.40class{39} %5.5L: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" /><property name="LOG_FILE"value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}" /><includeresource="org/springframework/boot/logging/logback/console-appender.xml" /><appender name="ServiceLogRollingFileAppender"class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_FILE}</file><encoder><pattern>${FILE_LOG_PATTERN}</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log</fileNamePattern></rollingPolicy></appender><root level="INFO"><springProfile name="local"><appender-ref ref="CONSOLE" /></springProfile><springProfile name="!local"><appender-ref ref="CONSOLE" /><appender-ref ref="ServiceLogRollingFileAppender" /></springProfile></root><logger name="com.example.study.controller" level="trace" additivity="false"><appender-ref ref="CONSOLE"/></logger></configuration>


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4780.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电路的组成和连接方式-通路、开路、短路

电路是电子设备中最基本的组成部分之一&#xff0c;它由各种电子元件组成&#xff0c;并通过连接方式构建成不同的电路结构。在电路设计和维护中&#xff0c;通路、开路和短路是常见的概念&#xff0c;它们分别代表了电路中不同的连接状态和故障情况。 工具认识&#xff1a; …

CVPR2023中的数据集工作(共46篇)

本文搜集了CVPR2023中所有的以数据集发布为主的工作&#xff0c;共搜集到46篇。所有标题都附带文章超链接&#xff0c;请君享用&#xff5e; An Image Quality Assessment Dataset for PortraitsLOGO: A Long-Form Video Dataset for Group Action Quality AssessmentTowards …

软考高级系统架构设计师(九) 作文模板-论设计模式及其应用(未完待续)

目录 掌握的知识点 创建型 结构型 行为型 掌握的知识点 设计模式分为哪3类 每一类包含哪些具体的设计模式 创建型 创建型模式是对对象实例化过程的抽象&#xff0c;他通过抽象类所定义的接口&#xff0c;封装了系统中对象如何创建、组合等信息。 创建型模式主要用于创建对…

【Spring Cloud系列】-负载均衡(Load Balancer,LB)

【Spring Cloud系列】-负载均衡&#xff08;Load Balancer&#xff0c;LB&#xff09; 文章目录 【Spring Cloud系列】-负载均衡&#xff08;Load Balancer&#xff0c;LB&#xff09;一、什么是负载均衡&#xff08;Load Balancer&#xff0c;LB&#xff09;二、负载均衡的主要…

C/C++变量的四种存储类型(auto自动、static静态、extern外部、register寄存器)

喵~对于一个变量来说&#xff0c;有三个维度需要了解&#xff1a;作用域、链接和存储期 一、前言&#xff1a;1.1 作用域&#xff1a;1.1.1 块作用域&#xff1a;1.1.2 函数作用域&#xff1a;1.1.3 函数原型作用域&#xff1a;1.1.4 文件作用域&#xff1a; 1.2 链接&#xff…

Maynor的博客专家成长之路——暨2023年中复盘

文章目录 博客专家成长之路——暨2023年中复盘前言念念不忘的博客专家每天只做三件事敲代码写博客健健身 我的感悟 不足之处未来&#xff1a;和CSDN共同成长最后 博客专家成长之路——暨2023年中复盘 前言 ​ 2023年不知不觉已经过去了半年有余&#xff0c;也是时候作年中复盘…

TOWARDS A UNIFIED VIEW OF PARAMETER-EFFICIENT TRANSFER LEARNING

本文也是属于LLM系列的文章&#xff0c;针对《TOWARDS A UNIFIED VIEW OF PARAMETER-EFFICIENT TRANSFER LEARNING》的翻译。 关于参数有效迁移学习的统一观点 摘要1 引言2 前言2.1 Transformer结构综述2.2 之前的参数高效调优方法综述 3 弥合差距-统一的视角3.1 仔细观察Pref…

容器技术概述

容器是一种轻量级的、操作系统级别的虚拟化技术&#xff0c;它允许我们在资源隔离的进程中运行应用程序及其依赖项。运行应用程序所需的所有必要组件都可以打包为单个可以复用的映像。当映像被执行时&#xff0c;它将运行在一个孤立的环境中&#xff0c;不会与宿主操作系统共享…

设计模式之结构型模式

本文已收录于专栏 《设计模式》 目录 概念说明大话设计模式结构型模式 各模式详解适配器模式&#xff08;Adapter Pattern&#xff09;桥接模式&#xff08;Bridge Pattern&#xff09;组合模式&#xff08;Composite Pattern&#xff09;装饰器模式&#xff08;Decorator Patt…

刘汝佳samaのDLX详解

引入 精确覆盖问题&#xff08;Exact Cover Problm&#xff09; 有一些由整数 1~n 组成的集合 S 1 , S 2 , S 3 , … , S r S_1,S_2,S_3,…,S_r S1​,S2​,S3​,…,Sr​&#xff0c; 要求选择若干个集合 S i S_i Si​,使1~n 的每个整数恰好在一个集合中出现。比如&#xff0c…

基于JSP+Servlet的文件上传与下载

基于JSPServlet的文件上传与下载 一、系统介绍二、功能展示1.项目骨架2.单文件上传3.多文件上传4.下载文件1.其他系统实现五.获取源码 一、系统介绍 项目类型&#xff1a;Java web项目 项目名称&#xff1a;基于JSPServlet的文件上传与下载案例 项目架构&#xff1a;B/S架构…

Flutter学习四:Flutter开发基础(五)资源管理

目录 0 引言 1 资源管理 1.1 指定 assets 1.2 Asset 变体&#xff08;variant&#xff09; 1.3 加载 assets 1.3.1 加载文本 1.3.2 加载图片 1.3.2.1 声明分辨率相关的图片 1.3.2.2 加载图片 1.3.3 依赖包中的资源图片 1.3.4 打包包中的 assets 1.3.5 特定平台 as…