springBoot中日志的使用

news/2024/4/30 0:32:00/文章来源:https://blog.csdn.net/qq_40182873/article/details/128209873

springBoot中日志的使用

日志基础

首先你需要知道日志门面,日志实现,日志桥接器。

基于日志实现,常用的有logback,log4j2,这两个日志实现是的创始人是同一个,概念差不多,这里以log4j2为例,有如下几个核心概念:

  • 记录器: 负责日志记录,可以精确到具体某个类,有一个默认的根记录器,你需要了解记录器之间的继承关系
  • 追加器: 负责日志输出的具体位置,一个记录器可以对应多个追加器
  • 布局: 一般是定义在追加器中,定义了日志的输出格式
  • 日志级别: 定义了日志的输出级别,一般日志级别越低,输出越详细

springboot中日志实现

官方文档;https://docs.spring.io/spring-boot/docs/2.6.13/reference/html/features.html#features.logging

logging:# 指定日志配置文件位置,指定之后,外部配置文件失效,但是可以被配置文件内部引用,注意logback-spring.xml这个名称不能修改config: classpath:log/logback-spring.xmllevel:#指定根记录器的级别root: debug# 单独指定某个记录器的日志级别cn.sry1201.demo.DemoApplication: debugfile:# 定义日志文件总大小max-total-size: 2GB# 日志文件路径path: ./MYLOG/${spring.application.name}# 日志文件名称name: ${spring.application.name}.logpattern:console: '%clr(%d{${LOG_DATEFORMAT_PATTERN:-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}'file:    '%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} --- %msg%n'

主要是通过日志桥接器统一桥接到logback上,如下图,日志实现只有logback-core

  1. SpringBoot底层也是使用slf4j+logback的方式进行日志记录
    a. logback桥接:logback-classic
  2. SpringBoot也把其他的日志都替换成了slf4j;
    a. log4j 适配: log4j-over-slf4j
    b. jul适配:jul-to-slf4j
    c. 这两个适配器都是为了适配Spring的默认日志:jc

日志级别

可以设置TRACE,DEBUG,INFO,WARN,ERROR,FATAL或OFF之一

日志格式

%d表示时间%thread表示线程名%-5level 表示日志级别,允许以五个字符长度输出%logger{50}表示具体的日志输出者,比如类名,括号内表示长度%msg表示具体的日志消息,就是logger.info("xxx")中的xxx%n表示换行%color(xxx)来指定对应列的输出颜色,可以实现控制台输出的颜色高亮

日志迭代(轮转)

如果您使用的是Logback,则可以使用application.properties或application.yaml文件微调日志轮播设置。对于所有其他日志记录系统,您需要直接自己配置轮转设置(例如,如果使用Log4J2,则可以添加log4j.xml文件)。

名称描述
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.file-name-pattern

    • ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz

      • ${LOG_FILE} 对应 logging.file.name
      • %d{yyyy-MM-dd} 日期 年-月-日
      • %i 索引, 当文件超出指定大小后进行的文件索引递增

自定义日志配置文件

可以通过在类路径中包含适日志配置文件来激活各种日志记录系统或使用logging.config

Logging SystemCustomization
Logbacklogback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
Log4j2log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging)logging.properties

这里我们使用 logback-spring.xml文件,需要说明的是使用日志配置后,springboot中的其他日志配置项不再生效,但是可以在日志配置文件中引用springBoot中的日志配置选项

logback-spring.xml这个文件名称不可以修改,否则spring加载不到,流程应该是spring加载后,转换其中spring独有的配置,然后在给logback进行加载。

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<configuration scan="true" scanPeriod="10 seconds" ><include resource="org/springframework/boot/logging/logback/defaults.xml"/><!--这里是读取spring配置文件中的数据,读取不到使用默认值,${}获取的是系统属性,部分系统属性可以参考官网,logging.pattern.console 会被spring转成系统属性CONSOLE_LOG_PATTERN --><springProperty scope="context" name="consolePattern" source="logging.pattern.console" defaultValue="${CONSOLE_LOG_PATTERN}"/><springProperty scope="context" name="filePattern" source="logging.pattern.file" defaultValue="${FILE_LOG_PATTERN}" /><springProperty scope="context" name="maxFileSize" source="logging.file.max-size" defaultValue="100MB"/><springProperty scope="context" name="maxTotalFileSize" source="logging.file.max-total-size" defaultValue="20GB"/><springProperty scope="context" name="maxFileHistory" source="logging.file.max-history" defaultValue="30"/><springProperty scope="context" name="rootLevel" source="logging.level.root" defaultValue="info"/><springProperty scope="context" name="logHome" source="logging.file.path" defaultValue="${user.home}/logs"/><property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} --- %msg%n"/><!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --><!-- 输出到控制台--><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!--过滤掉低于trace级别的日志--><level>trace</level></filter><encoder><pattern>${consolePattern}</pattern><charset>UTF-8</charset></encoder></appender><!-- 时间滚动输出level为INFO日志 --><appender name="ALL-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在记录的日志文件的路径及文件名 --><file>${logHome}/log_all.log</file><!--日志文件输出格式--><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 每天日志归档路径以及格式 --><fileNamePattern>${logHome}/all/%d{yyyy-MM-dd}/log-all-%d{yyyy-MM-dd}-%i.log.zip</fileNamePattern><cleanHistoryOnStart>true</cleanHistoryOnStart><maxHistory>${maxFileHistory}</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${maxFileSize}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><totalSizeCap>${maxTotalFileSize}</totalSizeCap></rollingPolicy><!--过滤掉所有级别低于info的日志--><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter></appender><appender name="ERROR-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在记录的日志文件的路径及文件名 --><file>${logHome}/log_error.log</file><!--日志文件输出格式--><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset> <!-- 此处设置字符集 --></encoder><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${logHome}/error/%d{yyyy-MM-dd}/log-error-%d{yyyy-MM-dd}-%i.log.zip</fileNamePattern><!--日志文件保留天数--><cleanHistoryOnStart>true</cleanHistoryOnStart><maxHistory>${maxFileHistory}</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${maxFileSize}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><!-- 此日志文件只记录ERROR级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><!--以下三行配置是日志级别匹配上了就接收,没匹配上就拒绝--><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><appender name="DEBUG-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在记录的日志文件的路径及文件名 --><file>${logHome}/log_debug.log</file><!--日志文件输出格式--><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset> <!-- 此处设置字符集 --></encoder><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${logHome}/debug/%d{yyyy-MM-dd}/log-debug-%d{yyyy-MM-dd}-%i.log.zip</fileNamePattern><!--日志文件保留天数--><cleanHistoryOnStart>true</cleanHistoryOnStart><maxHistory>${maxFileHistory}</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${maxFileSize}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><!-- 只打印debug级别的日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>DEBUG</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 引用spring.profiles.active 配置,确定生效的日志--><springProfile name="prod"><root level="${rootLevel}"><appender-ref ref="CONSOLE"/><appender-ref ref="ALL-LOG"/><appender-ref ref="ERROR-LOG"/></root></springProfile><springProfile name="dev,test"><root level="${rootLevel}"><appender-ref ref="CONSOLE"/><appender-ref ref="ALL-LOG"/><appender-ref ref="ERROR-LOG"/><appender-ref ref="DEBUG-LOG"/></root></springProfile><springProfile name="local"><root level="${rootLevel}"><appender-ref ref="CONSOLE"/></root></springProfile>
</configuration>

切换日志框架

  • 将 logback切换成log4j2
  1. 将logback的场景启动器排除(slf4j只能运行有1个桥接器)
  2. 添加log4j2的场景启动器
  3. 添加log4j2的配置文件,注意命名:log4j2-spring.xml

		<!--Log4j2的场景启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency><!--全局排除spring-boot-starter-logging内的所有依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId><exclusions><exclusion><groupId>*</groupId><artifactId>*</artifactId></exclusion></exclusions></dependency>

关联信息

  • 关联的主题:
  • 上一篇:
  • 下一篇:
  • image: 20221021/1
  • 转载自:

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

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

相关文章

经矩形窗截断的信号频谱泄露现象研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、频谱泄露现象✳️ 二、原因分析以及解决方法✳️ 三、Matlab程序获取与验证✳️ 一、频谱泄露现象 有一个余弦信号&#xff0c;信号频率30Hz&#xff0c;信号为x(t)cos(2π30t)&#xff0c;采样频率fs128Hz&#xff0c;样本长度分别取N128和N100&…

Android 使用 jni Demo示例

Android 使用 jni Demo示例简介1. NDK的介绍1.1 NDK 简介1.2 NDK 特点2. JNI介绍2.1 JNI 简介2.2 为什么要有 JNI&#xff1f;3. NDK 与 JNI 的关系NDK下载及环境配置1. 使用Android studio SDK Manager下载2.配置NDK2.1 配置环境变量2.2 Android studio配置NDK示例Demo流程1.版…

【云原生】devops之jenkins中pipeline语法(2)

前言&#xff1a; pipeline语法分类一般来说&#xff0c;有四种。分别是环境配置、阶段步骤、行为动作、逻辑判断。 二、阶段步骤 &#xff08;1&#xff09;post 根据pipeline块或者stage块&#xff08;阶段&#xff09;完成的状态来进行一个或者多个附加步骤&#xff08;取决…

Gaussian 计算静电云图确定吸附位点

计算背景&#xff1a; 利用高分子有机物等活性材料对有毒分子、原子、离子在真空、水溶液、有机溶液等环境下吸附&#xff0c;已是当今环境科学、矿物学、土壤化学等学科领域研究的热点。但如何确定最佳吸附位点以计算其吸附能就显得尤为重要。 现阶段多数物质的吸附均依据粒…

【通信基础】TTL、RS232、RS485

TTL1、TTL简介RS2321、RS232基本概念2、DB9串口定义及接线参考3、RS232经典电路4、特点RS4851、RS485简介2、特点3、传输距离4、经典电路5、传输差分电平信号TTL 1、TTL简介 TTL的英文全称是Transisor-Transisor Logic. 翻译过来就是晶体管与晶体管之间的逻辑电路。 TTL电平信…

Java搭建宝塔部署实战毕设项目springboot销售培训考评系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套Java开发的毕业设计项目springboot销售培训考评系统源码。 技术架构 技术框架&#xff1a;jQuery MySQL5.7 mybatis shiro Layui HTML CSS JS jpa运行环境&#xff1a;jdk8 IntelliJ…

Python 可迭代对象(Iterable)、迭代器(Iterator)与生成器(generator)之间的相互关系

1、迭代 通过重复执行的代码处理相似的数据集的过程&#xff0c;并且本次迭代的处理数据要依赖上一次的结果继续往下做&#xff0c;上一次产生的结果为下一次产生结果的初始状态&#xff0c;如果中途有任何停顿&#xff0c;都不能算是迭代。 # 非迭代例子 n 0 while n < …

java之注解的定义和使用

初识注解&#xff1a; 注解的概念&#xff1a; 注解是从JDK5.0开始引入的新技术&#xff0c;它不是程序本身&#xff0c;但是和注释有相同的作用&#xff0c;都能够对程序做出一定的解释&#xff0c;并且注解能够被其他编译器所读取 注解的格式&#xff1a; 注解是以“注释…

平均月薪15k+?自动化测试工程师?3个月教你从“点工”蜕变为“码农”

前言 一、自动化测试工程师平均收入【看图&#xff08;来自职友集&#xff09;】 基本收入都在15k左右&#xff0c;随着技术的越来越牛逼工资也就会越来越高。 我的职业生涯开始和大多数测试人一样&#xff0c;刚开始接触都是纯功能界面测试。那时候在一家电商公司做测试&…

[附源码]计算机毕业设计基于人脸识别的社区防疫管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SSRF漏洞详解与利用

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是SSRF漏洞详解与利用。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未授权设…

迭代器和生成器

文章目录迭代器和生成器图解迭代器和生成器的关系迭代器容器生成器yield函数生成器表达式总结迭代器和生成器 图解迭代器和生成器的关系 图1-1​ 不管是生成器还是我们的容器&#xff0c;最终都是迭代器&#xff0c;使用next方法进行有规律的获取元素&#xff0c;不需要将元素…

五问补盲(二) | 补盲激光雷达,角分辨率真的是越小越好吗?

HiEV消息&#xff08;文&#xff1a;爱LiDAR的小飞哥&#xff09; 如何简单地判断一款补盲激光雷达的成像效果&#xff1f; 业界通常有几个指标&#xff1a;视场角大小、测距范围&#xff0c;以及角分辨率。 一款优秀的补盲激光雷达&#xff0c;通俗来说&#xff1a;既要看得…

rtl8221b+mcu,2.5g光纤收发器的开发备份

1、rtl8221b是一款2.5g的光电转换的phy 系统的构建如下 为了省成本&#xff0c;不用mac来对接其中的gmii接口直接接光模块 2、mdio和mdc由mcu的gpio来模拟&#xff0c;在csdn上有很多的文章来参考 mdio的参数如下 不想看英文可以参考下面的文章 MDIO(clause 22 与 clause 4…

微服务框架 SpringCloud微服务架构 微服务保护 31 限流规则 31.2 流控模式【关联】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护31 限流规则31.2 流控模式【关联】31.2.1 流控模式31.2.2 流控模式 - 关联31.2.3 小结31 限流规则…

Python模块fileinput操作文件和目录操作总结

前言 之前介绍Python的 pathlib 模块可以有效的路径及文件查找等方便操作&#xff0c;本篇介绍一个相对 readlines() 获取文件内容更高效的用法 fileinput模块 对一个或者多个文件的内容迭代遍历&#xff08;类似文件操作的readlines()&#xff09;,但是返回的是迭代对象&…

【Linux】四、Linux 进程概念(三)|进程优先级|环境变量

目录 七、进程优先级 7.1 基本概念 7.1.1 什么是优先级 7.1.2 为什么存在优先级 7.1.3 Linux 优先级特点 7.2 查看系统进程 7.3 PRI 和 IN 7.4 查看进程优先级和更改进程优先级 7.5 其它概念 7.6 进程切换 八、环境变量 8.1 环境变量基本概念 8.2 常见环境变量 8…

English Learning - L1 站在高处建立灵魂 2022.12.5 周一

English Learning - L1 站在高处建立灵魂 2022.12.5 周一1.1 到底什么是语法1.2 为什么要学习语法口语分广义和狭义讲母语的人为啥不学语法&#xff1f;作为一名二语习得者口语中可不可以没有有语法&#xff1f;1.3 英语&#xff08;听说读写&#xff09;的核心金字塔理论关于词…

与图相关的一些矩阵

目录前言正文邻接矩阵(Adjacency matrix)度矩阵(Degree matrix)关联矩阵(Incidence matrix)拉普拉斯矩阵常规拉普拉斯矩阵拉普拉斯矩阵标准化前言 以无向图为例&#xff0c;介绍与图相关的各种矩阵。我们定义下面的图为 GGG&#xff1a; import networkx as nx import matplo…

redis cluster 集群安装

redis cluster 集群安装 redis集群方案 哨兵集群 如图&#xff0c;实际上还是一个节点对外提供服务&#xff0c;所以虽然是三台机器&#xff0c;但是还是一台机器的并发量&#xff0c;而且master挂了之后&#xff0c;整个集群不能对外提供服务 cluster集群 多个主从集群节点…