SpringCore完整学习教程4,入门级别

news2024/12/23 22:26:17

本章从第4章开始

4. Logging

Spring Boot使用Commons Logging进行所有内部日志记录,但保留底层日志实现开放。为Java Util Logging、Log4J2和Logback提供了默认配置。在每种情况下,记录器都预先配置为使用控制台输出和可选的文件输出。
默认情况下,如果您使用“starter”,则使用Logback进行日志记录。还包括适当的Logback路由,以确保使用Java Util Logging、Commons Logging、Log4J或SLF4J的依赖库都能正确工作。

Java有很多可用的日志框架。如果上面的列表看起来令人困惑,不要担心。一般来说,您不需要更改日志依赖项,Spring Boot默认值也可以正常工作。

当将应用程序部署到servlet容器或应用程序服务器时,使用Java Util logging API执行的日志记录不会路由到应用程序的日志中。这可以防止容器或已部署到容器的其他应用程序执行的日志记录出现在应用程序的日志中。

4.1. Log Format

Spring Boot的默认日志输出类似如下示例:

2023-10-28 18:53:33.562  INFO 21592 --- [nio-3344-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-10-28 18:53:33.562  INFO 21592 --- [nio-3344-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2023-10-28 18:53:33.563  INFO 21592 --- [nio-3344-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms

Logback没有致命级别。它被映射到ERROR。

4.2. Console Output

默认日志配置在写入消息时将消息回显到控制台。缺省情况下,日志记录级别为ERROR-level、WARN-level和INFO-level。您还可以通过使用——debug标志启动应用程序来启用“调试”模式。

类似于:

$ java -jar myapp.jar --debug

又或者,在配置文件中写入:

debug=true

当启用调试模式时,将配置一些核心日志记录器(嵌入式容器、Hibernate和Spring Boot)以输出更多信息。启用调试模式不会将应用程序配置为以debug级别记录所有消息。
或者,您可以通过使用——trace标志启动应用程序来启用“跟踪”模式(或在application.properties中使用trace=true)。这样做可以对选定的核心记录器(嵌入式容器、Hibernate模式生成和整个Spring组合)进行跟踪日志记录。

4.2.1. Color-coded Output

如果您的终端支持ANSI,则使用颜色输出来提高可读性。您可以将spring.output.ansi.enabled设置为支持的值以覆盖自动检测。
使用%clr转换字配置颜色编码。在其最简单的形式中,转换器根据日志级别为输出着色,如下例所示:

%clr(%5p)

日志级别与颜色的对应关系如下表所示:

LevelColor

FATAL

Red

ERROR

Red

WARN

Yellow

INFO

Green

DEBUG

Green

TRACE

Green

4.3. File Output

默认情况下,Spring Boot只记录到控制台,不写日志文件。如果除了控制台输出之外还想写入日志文件,则需要设置logging.file.name或logging.file.path属性(例如,在application.properties中)。
下表显示了如何进行日志记录。*属性可以一起使用:

logging.file.namelogging.file.pathExampleDescription

(none)

(none)

Console only logging.

Specific file

(none)

my.log

Writes to the specified log file. Names can be an exact location or relative to the current directory.

(none)

Specific directory

/var/log

Writes spring.log to the specified directory. Names can be an exact location or relative to the current directory.

日志文件在达到10 MB时轮换,并且与控制台输出一样,默认情况下记录错误级别、警告级别和info级别的消息。

日志记录属性独立于实际的日志记录基础设施。因此,特定的配置键(如logback。配置文件Logback)不是由spring Boot管理的。

4.4. File Rotation

如果您正在使用Logback,则可以使用您的应用程序对日志轮换设置进行微调。属性或应用程序。yaml文件。对于所有其他日志系统,您需要自己直接配置旋转设置(例如,如果您使用Log4J2,那么您可以添加一个Log4J2 .xml或Log4J2 -spring.xml文件)。
支持以下旋转策略属性:

NameDescription

logging.logback.rollingpolicy.file-name-pattern

The filename pattern used to create log archives.

logging.logback.rollingpolicy.clean-history-on-start

If log archive cleanup should occur when the application starts.

logging.logback.rollingpolicy.max-file-size

The maximum size of log file before it is archived.

logging.logback.rollingpolicy.total-size-cap

The maximum amount of size log archives can take before being deleted.

logging.logback.rollingpolicy.max-history

The maximum number of archive log files to keep (defaults to 7).

4.5. Log Levels

所有支持的日志系统都可以通过使用logging.level在Spring环境中(例如,在application.properties中)设置日志记录器级别。<logger-name>=<level>,其中level是TRACE、DEBUG、INFO、WARN、ERROR、FATAL或OFF中的一个。可以使用logging.level.root配置根记录器。

下面的例子显示了application.properties中可能的日志设置:

logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error

也可以使用环境变量设置日志记录级别。例如,LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG将org.springframework.web设置为DEBUG。

4.6. Log Groups

能够将相关的记录器分组在一起,以便可以同时配置它们,这通常是很有用的。例如,您可能经常更改所有与Tomcat相关的日志记录器的日志级别,但是您不容易记住顶级包。
为了帮助实现这一点,Spring Boot允许您在Spring环境中定义日志组。例如,下面是你如何通过将“tomcat”组添加到application.properties中来定义它:

logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat

一旦定义,你可以用一行改变组中所有记录器的级别:
PropertiesYaml

logging.level.tomcat=trace

Spring Boot包括以下可以开箱即用的预定义日志组:

NameLoggers

web

org.springframework.core.codecorg.springframework.httporg.springframework.weborg.springframework.boot.actuate.endpoint.weborg.springframework.boot.web.servlet.ServletContextInitializerBeans

sql

org.springframework.jdbc.coreorg.hibernate.SQLorg.jooq.tools.LoggerListener

4.7. Using a Log Shutdown Hook

为了在应用程序终止时释放日志资源,提供了一个关机钩子,该钩子将在JVM退出时触发日志系统清理。这个关闭钩子是自动注册的,除非您的应用程序作为war文件部署。如果您的应用程序具有复杂的上下文层次结构,那么shutdown钩子可能无法满足您的需求。如果没有,禁用shutdown钩子,并研究底层日志系统直接提供的选项。例如,Logback提供上下文选择器,允许在自己的上下文中创建每个Logger。您可以使用日志记录。

logging.register-shutdown-hook=false

4.8. Custom Log Configuration

可以通过在类路径中包含适当的库来激活各种日志记录系统,还可以通过在类路径的根目录或由以下Spring Environment属性指定的位置提供合适的配置文件来进一步定制日志记录系统:logging.config。
你可以通过使用org.springframework.boot.logging.LoggingSystem系统属性强制Spring Boot使用特定的日志系统。该值应该是LoggingSystem实现的完全限定类名。您还可以通过使用一个值完全禁用Spring Boot的日志配置

因为日志记录是在ApplicationContext创建之前初始化的,所以不可能从Spring @Configuration文件中的@PropertySources控制日志记录。更改日志系统或完全禁用它的唯一方法是通过系统属性。

根据您的日志系统,将加载以下文件:

Logging SystemCustomization

Logback

logback-spring.xmllogback-spring.groovylogback.xml, or logback.groovy

Log4j2

log4j2-spring.xml or log4j2.xml

JDK (Java Util Logging)

logging.properties

如果可能,我们建议您在日志配置中使用-spring变量(例如,logback-spring.xml而不是logback.xml)。如果使用标准配置位置,Spring不能完全控制日志初始化。

Java Util Logging有一些已知的类加载问题,在从“可执行jar”运行时会导致问题。如果可能的话,我们建议您在从“可执行jar”运行时避免使用它。

为了帮助进行定制,将一些其他属性从Spring环境转移到System属性。这允许记录系统配置使用属性。例如,在应用程序中设置logging.file.name。属性或LOGGING_FILE_NAME作为环境变量将导致设置LOG_FILE System属性。传输的属性如下表所示:

Spring EnvironmentSystem PropertyComments

logging.exception-conversion-word

LOG_EXCEPTION_CONVERSION_WORD

The conversion word used when logging exceptions.

logging.file.name

LOG_FILE

If defined, it is used in the default log configuration.

logging.file.path

LOG_PATH

If defined, it is used in the default log configuration.

logging.pattern.console

CONSOLE_LOG_PATTERN

The log pattern to use on the console (stdout).

logging.pattern.dateformat

LOG_DATEFORMAT_PATTERN

Appender pattern for log date format.

logging.charset.console

CONSOLE_LOG_CHARSET

The charset to use for console logging.

logging.pattern.file

FILE_LOG_PATTERN

The log pattern to use in a file (if LOG_FILE is enabled).

logging.charset.file

FILE_LOG_CHARSET

The charset to use for file logging (if LOG_FILE is enabled).

logging.pattern.level

LOG_LEVEL_PATTERN

The format to use when rendering the log level (default %5p).

PID

PID

The current process ID (discovered if possible and when not already defined as an OS environment variable).

如果使用Logback,还会传输以下属性:

Spring EnvironmentSystem PropertyComments

logging.logback.rollingpolicy.file-name-pattern

LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN

Pattern for rolled-over log file names (default ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz).

logging.logback.rollingpolicy.clean-history-on-start

LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START

Whether to clean the archive log files on startup.

logging.logback.rollingpolicy.max-file-size

LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE

Maximum log file size.

logging.logback.rollingpolicy.total-size-cap

LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP

Total size of log backups to be kept.

logging.logback.rollingpolicy.max-history

LOGBACK_ROLLINGPOLICY_MAX_HISTORY

Maximum number of archive log files to keep.

所有支持的日志系统在解析配置文件时都可以参考System属性。参见spring-boot.jar中的默认配置示例:

  • Logback

  • Log4j 2

  • Java Util logging

如果你想在日志属性中使用占位符,你应该使用Spring Boot的语法,而不是底层框架的语法。值得注意的是,如果使用Logback,应该使用:作为属性名与其默认值之间的分隔符,而不是使用:-。
您可以通过仅覆盖LOG_LEVEL_PATTERN(或使用Logback覆盖logging.pattern.level)将MDC和其他特别内容添加到日志行。例如,如果您使用logging.pattern。level=user:%X{user} %5p,则默认日志格式中包含“user”的MDC条目,如果存在,如下例所示。

2019-08-30 12:30:04.031 user:someone INFO 22174 --- [  nio-8080-exec-0] demo.Controller
Handling authenticated request

4.9. Logback Extensions

Spring Boot包括许多Logback扩展,可以帮助进行高级配置。您可以在logback-spring.xml配置文件中使用这些扩展名。

因为标准的logback.xml配置文件加载得太早,所以不能在其中使用扩展。您需要使用logback-spring.xml或定义一个日志记录。配置属性。

扩展不能与Logback的配置扫描一起使用。如果您尝试这样做,对配置文件进行更改会导致类似于以下错误之一的错误记录:

ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
4.9.1. Profile-specific Configuration

<springProfile>标签允许您选择性地包含或排除基于活动Spring配置文件的配置部分。在<configuration>元素中的任何地方都支持配置文件节。使用name属性指定哪个概要文件接受配置。<springProfile>标记可以包含一个概要名称(例如staging)或一个概要表达式。概要表达式允许表达更复杂的概要逻辑,例如production & (eu-central | eu-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>
4.9.2. Environment Properties

<springProperty>标记允许您公开Spring环境中的属性,以便在Logback中使用。如果希望访问应用程序中的值,这样做可能很有用。属性文件中的Logback配置。该标记的工作方式类似于Logback的标准<property>标记。但是,不是直接指定值,而是指定属性的来源(来自环境)。如果需要将属性存储在局部作用域以外的地方,可以使用scope属性。如果需要一个回退值(如果没有在环境中设置属性),可以这样做。

<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>

源必须以kebab的形式指定(例如my.property-name)。但是,可以通过使用宽松的规则将属性添加到环境中。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云服务器搭建Spark集群

文章目录 1. Local 模式1.1 安装local模式1.2 命令行工具1.3 提交本地应用 2. Standlone模式2.1 集群配置2.2 修改配置文件2.3 启动集群与停止集群2.4 提交应用到集群环境2.5 提交应用的参数详细说明2.6 配置历史服务2.7 配置高可用&#xff08;HA&#xff09; 3. Yarn模式&…

“爱知道”,你知道吗?

拥抱时代浪潮&#xff0c;加速科技变革。数字经济时代&#xff0c;杭州重点贯彻市委市政府数字经济创新提质“一号发展工程”&#xff0c;加快发展数字经济&#xff0c;推动全市数字经济往高攀升、向新进军、以融提效。基于政府对数字经济新活力的赋能、优化数字社会环节、构建…

『力扣刷题本』:删除排序链表中的重复元素

一、题目 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2]示例 2&#xff1a; 输入&#xff1a;head [1,1,2,3,3] 输出&am…

守牢底线——建行驻江门市分行纪检组举办2023年清廉合规大讲堂

为推动廉洁教育打通“最后一公里”&#xff0c;近日&#xff0c;建行驻江门市分行纪检组举办江门市分行2023年清廉合规大讲堂。 本次大讲堂邀请了检察院资深检察官专题讲授《金融从业人员易涉犯罪问题剖析及预防》&#xff0c;检察官结合一线办案经历&#xff0c;从防范化解金…

Spring FactoryBean 源码讲解

Spring FactoryBean 源码讲解 什么是Spring FactoryBean Spring FactoryBean是一个特殊的Bean&#xff0c;它实现了FactoryBean接口并重写了其getObject()方法&#xff0c;用于生产其他Bean的实例。在Spring容器启动时&#xff0c;会自动调用FactoryBean的getObject()方法来获…

设计模式:访问者模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《状态模式》 下一篇《原型模式》 简介&#xff1a; 访问者模式&#xff0c;它是一种将数据操作与数据结构分离的设计模式&#xff0c;它属于行为型模式。访问者模式的基本思想是&#xff0c;针对…

Redis中的数据类型以及适用场景

1.Redis中的数据类型 Redis中的数据类型包括&#xff1a;String(字符串&#xff09;、Hash(字典)、List(列表)、Set(集合)、Sorted Set【Zset】(有序集合&#xff09;。 Redis 所有的数据结构都是一个key对应一个value&#xff0c;不同类型的数据结构之间的差异就在于value的…

电子器件 电阻参数与选型

一、参数 电阻的主要参数有&#xff1a;精度、温度系数和功率三个 1.1 精度 一般有0.1%、1%&#xff0c;5%&#xff0c;10%&#xff0c;15%、25%等&#xff0c;一般精度越高价格也越高。有些场合需要使用高精度的电阻。 其中精度所代表的字母如下&#xff1a; L0.01%P0.02…

建行广东江门分行:科技赋能,数据助力纠“四风”

为进一步深化落实中央八项规定精神&#xff0c;持续加大“四风”问题查处力度&#xff0c;建行驻江门市分行纪检组根据《广东省分行贯彻落实中央八项规定精神持之以恒纠治“四风”实施方案》&#xff08;建粤党发〔2023〕1号&#xff09;安排&#xff0c;对驻在市分行开展“四风…

基于ssm实验室管理系统

功能如图所示 摘要 实验室管理系统&#xff08;Laboratory Management System&#xff0c;简称LMS&#xff09;是一种基于SSM&#xff08;Spring、SpringMVC、MyBatis&#xff09;框架的信息化工具&#xff0c;旨在帮助实验室管理者高效、精确地管理实验室资源、人员和实验数据…

详解Java的八种基本数据类型

目录 Java八种数据类型 注意&#xff1a; 四个大类 整型&#xff08;byte、short、int、long&#xff09; 注意 浮点型&#xff08;float、double&#xff09; 神奇的代码 注意&#xff1a; 字符型&#xff08;char&#xff09; 布尔型&#xff08;boolean&#xff0…

CondaError: Downloaded bytes did not match Content-Length

问题 使用anaconda下载包文件时&#xff0c;出现了CondaError: Downloaded bytes did not match Content-Length的错误 CondaError: Downloaded bytes did not match Content-Lengthurl: https://conda.anaconda.org/pytorch/win-64/pytorch-2.1.0-py3.11_cuda11.8_cudnn8_0.…

Jmeter(十七):利用jmeter插件收集性能测试结果

利用jmeter插件收集性能测试结果 汇总报告&#xff08;Summary Report &#xff09; 用来收集性能测试过程中的请求以及事务各项指标。通过监听器--汇总报告 可以添加该元件。界面如下图所示 汇总报告界面介绍&#xff1a; 所有数据写入一个文件&#xff1a;保存测试结果到本…

软件测试面试:支付功能如何测试?

前言 相信有很多的小伙伴全面武装好在找工作。那么&#xff0c;作为测试&#xff0c;不管是面试还是笔试&#xff0c;必然要被考验到的就是”测试思维“。在面试中就是体现在如下面试题中&#xff1a; “说说你项目中的xx模块你是如何测试的&#xff1f;” “给你一个购物车&a…

直线模组怎么分类?

直线模组是一种广泛应用于自动化设备、机器人、数控机床、电子设备等领域的精密传动系统。根据不同的分类方式&#xff0c;直线模组可分为多种类型。 一、按照轴数分类 1、单轴直线模组&#xff1a;只有一个移动轴的直线模组&#xff0c;通常用于简单的直线运动和定位。 2、双…

9、定义错误页

在layouts目录下新建error.vue&#xff0c;可以通过layout函数使用布局文件&#xff0c;通过props: [“error”]能拿到错误信息对象。 <template><div>{{ error.statusCode }}: {{ error.message }}</div> </template><script> export default {…

33:深入浅出x86中断机制

背景 我们知道使用0x10号中断&#xff0c;可以在屏幕上打印一个字符。 问题 系统中的 中断 究竟是什么&#xff1f; 生活中的例子 来看一个生活中例子&#xff1a; 小狄的工作方式 在处理紧急事务的时候&#xff0c;不回应同事的技术求助。老板的召唤必须回应&#xff0c;…

Golang教程——配置环境,再探GoLand

文章目录 一、Go是什么&#xff1f;二、环境配置验证配置环境变量 三、安装开发者工具GoLand四、HelloGolang 一、Go是什么&#xff1f; Go&#xff08;也称为Golang&#xff09;是一种开源的编程语言&#xff0c;由Google开发并于2009年首次发布。Go语言旨在提供一种简单、高…

剑指JUC原理-5.synchronized底层原理

Java对象头 以32位虚拟机为例&#xff1a; 普通对象 在Java虚拟机中&#xff0c;每个对象都有一个对象头&#xff08;Object Header&#xff09;&#xff0c;其中包含了一些用于管理对象的元数据信息。对象头通常由两部分组成&#xff1a;mark word&#xff08;标记字&#x…

开源3D激光(视觉)SLAM算法汇总(持续更新)

目录 一、Cartographer 二、hdl_graph_slam 三、LOAM 四、LeGO-LOAM 五、LIO-SAM 六、S-LOAM 七、M-LOAM 八、livox-loam 九、Livox-Mapping 十、LIO-Livox 十一、FAST-LIO2 十二、LVI-SAM 十三、FAST-Livo 十四、R3LIVE 十五、ImMesh 十六、Point-LIO 一、Cartographer Cartog…