当前位置: 首页 > news >正文

Spring Boot 3中一套可以直接用于生产环境的Log4J2日志配置

文章目录

    • 一 Log4J2 相关概念及基本特点
    • 二 Spring Boot3 中启用Log4J2的pom.xml配置
    • 三 application.properties 的配置
    • 四 完整配置

一 Log4J2 相关概念及基本特点

Log4J2是Apache Log4j的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升。
Logger:日志记录器,用于标识日志的来源。常见的有两种:Root和Logger。Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出
Appender:日志输出器,用于将日志记录输出到指定的目标。常见的有三种子节点:Console、RollingFile、File。Console节点用来定义输出到控制台的Appender;RollingFile节点用来定义超过指定条件自动删除旧的创建新的Appender;File节点用来定义输出到指定位置的文件的Appender。
Layout:日志格式化器,用于定义日志记录的输出格式。Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出。

二 Spring Boot3 中启用Log4J2的pom.xml配置

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>

排除原依赖中的日志相关包,单独引入Log4J2依赖。

三 application.properties 的配置

# 控制台输出的字符集
logging.charset.console=UTF-8
# 日志写入文件的字符集
logging.charset.file=UTF-8
# Log4J2自定义配置的路径,放置到resources目录下
logging.config=classpath:logback.xml
# 应用程序包的路径
logging.level.com.test=INFO
# 日志存放路径
logging.file.path=logs/test.log

四 完整配置

配置文件的名称为:logback.xml,放置于resources目录下。

<?xmlversion="1.0" encoding="UTF-8"?><!--status:用来指定log4j2本身的打印日志的级别,monitorinterval:用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s-->
<Configuration status="WARN" monitorInterval="30"><Properties><Property name="logDir">logs</Property><Property name="logFile">cmams</Property><Property name="level">DEBUG</Property></Properties><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="[%-4level] [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %logger{96}:%line - %msg%n"/><!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/></Console><RollingFile name="File" fileName="${logDir}/${logFile}.log"filePattern="${logDir}/${logFile}-%d{yyyy-MM-dd}-%i.log.gz"><!--日志输出格式--><PatternLayout pattern="[%-4level] [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %logger{96}:%line - %msg%n"/><!--满足任何一个policy即进行归档--><Policies><!--当前日志与开始日期不匹配(RollingFile中配置的filePattern中配置的最小时间单位不匹配时)时进行归档--><TimeBasedTriggeringPolicy/><!--文件超过512M进行归档,SizeBasedTriggeringPolicy规定了当日志文件达到了指定的size时,触发rollover操作。size参数可以用KB、MB、GB等做后缀来指定具体的字节数,如20MB--><SizeBasedTriggeringPolicy size="64MB"/></Policies><!--归档的文件最大数量,max参数指定了计数器的最大值。一旦计数器达到了最大值,过旧的文件将被删除。--><DefaultRolloverStrategy max="20"><!--删除规则--><Delete basePath="${logDir}" maxDepth="2"><!--匹配文件规则--><IfFileName glob="*.log.gz"><IfLastModified age="60d"><IfAny><!--logDir下文件总大小超过5GB,进行删除--><IfAccumulatedFileSize exceeds="5GB"/><!--logDir下文件总数量超过100,进行删除--><IfAccumulatedFileCount exceeds="100"/></IfAny></IfLastModified></IfFileName></Delete></DefaultRolloverStrategy></RollingFile></Appenders><Loggers><!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。--><Logger name="com.cxwn.cmams" level="${level}" additivity="false"><AppenderRef ref="File"/><AppenderRef ref="Console"/></Logger><Logger name="org.springframework" level="ERROR" additivity="false"><AppenderRef ref="Console"/><AppenderRef ref="File"/></Logger><Root level="WARN"><AppenderRef ref="Console"/><AppenderRef ref="File"/></Root></Loggers>
</Configuration>

相关文章:

Spring Boot 3中一套可以直接用于生产环境的Log4J2日志配置

文章目录 一 Log4J2 相关概念及基本特点二 Spring Boot3 中启用Log4J2的pom.xml配置三 application.properties 的配置四 完整配置 一 Log4J2 相关概念及基本特点 Log4J2是Apache Log4j的升级版&#xff0c;参考了logback的一些优秀的设计&#xff0c;并且修复了一些问题&…...

iOS按钮控件UIButton使用

1.在故事板中添加按钮控件,步聚如下: 同时按钮Shift+Commad+L在出现在控件库中选择Button并拖入View Controller Scene中 将控件与变量btnSelect关联 关联后空心变实心 如何关联?直接到属性窗口拖按钮变量到控件上,出现一条线,然后松开,这样就关联成功了 关联成功后属性窗口…...

小程序开发实战案例之三 | 小程序底部导航栏如何设置

小程序中最常见的功能就是底部导航栏了&#xff0c;今天就来看一下怎么设置一个好看的导航栏&#xff5e;这里我们使用的是支付宝官方小程序 IDE 做示范。 官方提供的底部导航栏 第一步&#xff1a;页面创建 一般的小程序会有四个 tab&#xff0c;我们这次也是配置四个 tab 的…...

Android : 序列化 JSON简单应用

1. JSON介绍 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于阅读和写入&#xff0c;同时也易于机器解析和生成。它基于JavaScript的子集&#xff0c;采用完全独立于语言的文本格式来存储和表示数据。JSON是纯文本&#x…...

Java小案例-RocketMQ的11种消息类型,你知道几种?(普通消息和批量消息)

前言 这篇给大家讲普通消息和批量消息&#xff0c;主要配合代码进行讲解&#xff0c;关于RocketMQ的基础知识已经在上篇给大家讲过需要回顾的点击下面这个链接去看 RocketMQ基础知识 普通消息 普通消息其实就很简单&#xff0c;是Apache RocketMQ中最基础的消息形式&#x…...

前端小技巧: 设计一个简版前端统计 SDK

统计 sdk 如何设计 1 ) 概述 客户端一个sdk &#xff0c;把数据发送给服务端(第三方统计平台)服务端产生一个统计的报表 2 &#xff09;需求点 访问量&#xff1a;pv自定义事件&#xff1a;用户的一切行为我们都可以自定义采集性能&#xff0c;错误 3 ) 代码实现 const P…...

DevOps搭建(十一)-Jenkins容器内部使用Docker详解

1、目的 配置的目的是使得Jenkins容器可以直接使用宿主机的Docker,从而可以直接使用Docker命令进行本地打包操作,然后推送到Harbor镜像仓库。 2、修改数据卷 如何在docker中执行宿主机的docker操作,我们管它叫docker in docker。 至于为什么要在docker中操作宿主机的doc…...

用户访问认证

注解 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface Login { }自定义拦截器 Component public class AuthInterceptor implements HandlerInterceptor {ResourceJwtUtils jwtUtils;Overridepublic boolean preHandle(HttpServ…...

前端知识(七)———HTTPS:保护网络通信安全的关键

当谈到网络通信和数据传输时&#xff0c;安全性是一个至关重要的问题。在互联网上&#xff0c;有许多敏感信息需要通过网络进行传输&#xff0c;例如个人身份信息、银行账户信息和商业机密等。为了保护这些信息不被未经授权的人访问和篡改&#xff0c;HTTPS&#xff08;超文本传…...

element-ui按钮el-button,点击之后恢复之前的颜色

在开发过程中, 使用el-button 按钮点击之后, 没有恢复到之前的颜色, 还是保持点击之后的颜色,需要解决这个问题, <template><div><el-button size"mini" type"primary" plain click"onClick($event)">按钮</el-button>…...

Excel: Python 如何干掉 VBA 系列 乙

以下内容为本人的学习笔记&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/k2XtfXS3GUt4r2QhizMOVg 创建工作表格 创建表格 xlwings 就可以协助创建插入了宏的 excel 表格。 先找到一个心满意足的目录&#xff0c;一般我…...

算法笔记—链表、队列和栈

链表、队列和栈 1. 链表1.1 单链表反转1.2 双链表反转1.3 合并两个有序链表1.4 链表相加1.5 划分链表 2. 队列和栈2.1 循环队列2.2 栈实现队列2.3 队列实现栈2.4 最小栈2.2 双端队列 1. 链表 1.1 单链表反转 力扣 反转链表 // 反转单链表public ListNode reverseList(ListNod…...

MySQL中的时间函数整理汇总

1.获取当前时间 -- 获取当前时间 SELECT NOW(); -- 获取当前日期 SELECT CURDATE(); -- 获取当前时分秒 SELECT CURTIME(); 2.获取对应日期对应的年/月/日/月份名/星期数 -- 返回对应日期对应的年/月/日/月份名/星期数 select year(now())as 年,month(now())as 月,day(now())…...

stu06-VSCode里的常用快捷键

Alt Z&#xff1a;文字自动换行。当一行的文字太长时&#xff0c;可以使用。或者查看→自动换行Alt Shift ↓ &#xff1a;快速复制当前行到下一行Alt Shift ↑ &#xff1a;快速复制当前行到上一行Alt B&#xff1a;在默认浏览器中打开当前.html文件Ctrl Enter&#xf…...

Bypass open_basedir

讲解 open_basedir是php.ini中的一个配置选项&#xff0c;可用于将用户访问文件的活动范围限制在指定的区域。 假设open_basedir/var/www/html/web1/:/tmp/&#xff0c;那么通过web1访问服务器的用户就无法获取服务器上除了/var/www/html/web1/和/tmp/这两个目录以外的文件。…...

【数据库设计和SQL基础语法】--查询数据--过滤

一、过滤数据 1.1 WHERE子句 基本条件过滤 使用比较运算符 在SQL中&#xff0c;基本条件过滤是通过使用比较运算符来限定检索的数据。以下是一些常用的比较运算符和它们的用法&#xff1a; 运算符说明示例等于 ()用于检索列中与指定值相等的行。示例&#xff1a;SELECT * FROM…...

关于git clone速度极慢的解决方法

&#xff01;&#xff01;&#xff01;&#xff01;前提条件&#xff1a;得有一个可靠且稳定的梯子&#xff0c;如果没有接下来的就不用看了 前言&#xff1a;我在写这篇文章前&#xff0c;也搜索过很多相关git clone速度很慢的解决方法&#xff0c;但是很多很麻烦&#xff0c…...

软件设计不是CRUD(8):低耦合模块设计实战——组织机构模块(下)

接上文《软件设计不是CRUD&#xff08;7&#xff09;&#xff1a;低耦合模块设计实战——组织机构模块&#xff08;中&#xff09;》 5、某项目研发团队进行扩展 上文中我们介绍了如何研发一个具有较低耦合强度的组织机构模块&#xff08;包括模块的SDK和模块的默认本地数据库…...

docker-compose Install gitea

gitea 前言 Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs 分支而来…...

【Pytorch】学习记录分享1——Tensor张量初始化与基本操作

1. 基础资料汇总 资料汇总 pytroch中文版本教程 PyTorch入门教程 B站强推&#xff01;2023公认最通俗易懂的【PyTorch】教程&#xff0c;200集付费课程&#xff08;附代码&#xff09;人工智能_机器 视频 1.PyTorch简介 2.PyTorch环境搭建 basic: python numpy pandas pytroch…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...