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

SpringBoot 3+ Lombok日志框架从logback改为Log4j2

r要将Spring Boot 3项目中的日志框架从Logback切换到Log4j2,并配置按日期滚动文件和控制台输出,请按照以下步骤操作:

步骤 1:排除Logback并添加Log4j2依赖

pom.xml中修改依赖:

<dependencies><!-- 排除默认的Logback依赖 --><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><!-- 添加Log4j2依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency><!-- 其他依赖... -->
</dependencies><!-- 可选:添加异步日志支持(如需要高性能) -->
<dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>3.4.4</version>
</dependency>

步骤 2:创建Log4j2配置文件

src/main/resources目录下创建log4j2-spring.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30"><!-- Powered by Moshow@zhengkai.blog.csdn.net --><Properties><Property name="LOG_PATTERN_FILE">%d{yyyy-MM-dd HH:mm:ss.SSS}{GMT+0} [%t] %-5level %logger{36} - %msg%n</Property><Property name="LOG_PATTERN_CONSOLE">%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%-5level} [%t] %highlight{%c{1.}.%M(%L)}: %msg%n%throwable</Property><Property name="LOG_DIR" value="logs"/><Property name="LOG_FILE_NAME" value="sre_audit_log_dev"/></Properties><Appenders><!-- 控制台输出 --><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="${LOG_PATTERN_CONSOLE}" disableAnsi="false" noConsoleNoAnsi="false"/></Console><!-- 按日期滚动的文件输出 --><RollingFile name="RollingFile"fileName="${LOG_DIR}/${LOG_FILE_NAME}.log"filePattern="${LOG_DIR}/${LOG_FILE_NAME}-%d{yyyy-MM-dd}.log"><PatternLayout pattern="${LOG_PATTERN_FILE}"/><Policies><!-- 每天滚动一次 --><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="50 MB" /></Policies><!-- 保留最近7天的日志 --><DefaultRolloverStrategy max="90"/></RollingFile></Appenders><Loggers><Root level="info"><AppenderRef ref="Console"/><AppenderRef ref="RollingFile"/></Root></Loggers>
</Configuration>

步骤 3:验证配置

  1. 启动应用:检查控制台是否有日志输出。

  2. 检查文件:查看logs/app.log是否生成,且每天会自动滚动生成新文件(如app-2023-10-01.log)。

  3. 验证Lombok:确保@Slf4j注解生成的日志能正常工作。

高级配置(可选)

  • 异步日志:在配置文件中使用<AsyncLogger><AsyncRoot>提升性能。

  • 按大小滚动:在RollingFile中添加<SizeBasedTriggeringPolicy size="100 MB"/>,实现按大小滚动。

  • 多环境配置:使用Spring Profile,创建log4j2-spring-dev.xmllog4j2-spring-prod.xml

常见问题

  • 依赖冲突:若启动时报SLF4J绑定冲突,检查是否遗漏排除spring-boot-starter-logging

  • 配置路径:确保配置文件命名为log4j2-spring.xml并放在src/main/resources下。

  • 时区问题:滚动时间基于服务器时区,可用<TimeBasedTriggeringPolicy timeZone="UTC"/>指定时区。

多环境配置

application.yaml中指定active的内容(本地模式),服务器则通过命令注入

java -jar your-app.jar --spring.profiles.active=dev
spring:profiles:active: dev
logging:config: classpath:log4j2-spring-dev.xml

然后application-dev.yaml中指定对应的文件为log4j2-spring-dev.yaml,从而形成闭环 

相关文章:

SpringBoot 3+ Lombok日志框架从logback改为Log4j2

r要将Spring Boot 3项目中的日志框架从Logback切换到Log4j2&#xff0c;并配置按日期滚动文件和控制台输出&#xff0c;请按照以下步骤操作&#xff1a; 步骤 1&#xff1a;排除Logback并添加Log4j2依赖 在pom.xml中修改依赖&#xff1a; <dependencies><!-- 排除默…...

【bug】[42000][1067] Invalid default value for ‘xxx_time‘

MySQL错误解决&#xff1a;Invalid default value for xxx_time’问题分析与修复方案 问题描述 在MySQL数据库操作中&#xff0c;当尝试创建或修改表结构时&#xff0c;可能会遇到以下错误信息&#xff1a; [bug] [42000][1067] Invalid default value for xxx_time这个错误…...

网站安全专栏-------浅谈CC攻击和DDoS攻击的区别

CC攻击和DDoS攻击都是网络攻击的类型&#xff0c;但它们在攻击方式、目标和效果上有所不同。以下是它们之间的一些主要区别&#xff1a; ### 1. 定义 - **DDoS攻击&#xff08;分布式拒绝服务攻击&#xff09;**&#xff1a; DDoS攻击是指攻击者通过大量的分布式计算机&#x…...

【Tauri2】002——Cargo.toml和入口文件

目录 前言 正文 toml文件的基础 注释——# Comment 键值对——Key/Value 表——[table] 内联表——Inline Table 数组——Array package和crate Cargo.toml文件 Cargo.toml——dependencies Cargo.toml——lib crate-type main.rs 前言 【Tauri2】001——安装及…...

二叉树相关算法实现:判断子树与单值二叉树

目录 一、判断一棵树是否为另一棵树的子树 &#xff08;一&#xff09;核心思路 &#xff08;二&#xff09;代码实现 &#xff08;三&#xff09;注意要点 二、判断一棵树是否为单值二叉树 &#xff08;一&#xff09;核心思路 &#xff08;二&#xff09;代码实现…...

CSS 美化页面(一)

一、CSS概念 CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;是一种用于描述 HTML 或 XML&#xff08;如 SVG、XHTML&#xff09;文档 样式 的样式表语言。它控制网页的 外观和布局&#xff0c;包括字体、颜色、间距、背景、动画等视觉效果。 二、CS…...

23种设计模式-组合(Composite)设计模式

组合设计模式 &#x1f6a9;什么是组合设计模式&#xff1f;&#x1f6a9;组合设计模式的特点&#x1f6a9;组合设计模式的结构&#x1f6a9;组合设计模式的优缺点&#x1f6a9;组合设计模式的Java实现&#x1f6a9;代码总结&#x1f6a9;总结 &#x1f6a9;什么是组合设计模式…...

LSTM创新点不足?LSTM + Transformer融合模型引领Nature新突破

LSTM创新点不足&#xff1f;LSTM Transformer融合模型引领Nature新突破 2024年LSTM真的没有创新空间了吗&#xff1f; 最新研究表明&#xff0c;通过将LSTM与Transformer巧妙融合&#xff0c;依然能创造出Nature级别的突破性成果。LSTM擅长处理短期时序模式&#xff0c;但在…...

【区块链安全 | 第六篇】NFT概念详解

文章目录 NFTNFT&#xff08;非同质化代币&#xff09;FT&#xff08;可替代代币&#xff09; 以太坊 NFT 标准ERC-721&#xff08;单一资产&#xff09;ERC-1155&#xff08;多资产&#xff09; NFT 市场版税机制NFT 借贷NFT 安全 NFT NFT&#xff08;Non-Fungible Token&…...

React组件简介

组件 在 React 中&#xff0c;组件&#xff08;Component&#xff09; 是 UI 的基本构建块。可以把它理解为一个独立的、可复用的 UI 单元&#xff0c;类似于函数&#xff0c;它接受输入&#xff08;props&#xff09;&#xff0c;然后返回 React 元素来描述 UI。 组件的简单…...

iOS常见网络框架

URLSession、Alamofire 和 Moya 1. URLSession 1.1 核心概念 URLSession 是 Apple 官方提供的网络请求 API&#xff0c;封装在 Foundation 框架中。它支持 HTTP、HTTPS、FTP 等协议&#xff0c;可用于&#xff1a; ​ • 普通网络请求&#xff08;GET/POST&#xff09; ​ …...

蓝桥杯备考---->激光炸弹(二维前缀和)

本题我们可以构造二维矩阵&#xff0c;然后根据题意&#xff0c;枚举所有边长为m的正方形&#xff0c;找到消灭价值最多的炸弹 #include <iostream> using namespace std; const int N 1e4; int a[N][N]; int n,m; int f[N][N]; int main() {cin >> n >> m…...

python笔记之判断月份有多少天

1、通过随机数作为目标月份 import random month random.randint(1,12)2、判断对应的年份是闰年还是平年 因为2月这个特殊月份&#xff0c;闰年有29天&#xff0c;而平年是28天&#xff0c;所以需要判断对应的年份属于闰年还是平年&#xff0c;代码如下 # 判断年份是闰年还…...

数据结构 --树和森林

树和森林 树的存储结构 树的逻辑结构 树是一种递归定义的数据结构 树是n(n≥0)个结点的有限集。当n0时&#xff0c;称为空树。在任意一棵非空树中应满足&#xff1a; 1)有且仅有一个特定的称为根的结点。 2)当n>1时&#xff0c;其余结点可分为m(m>0)个互不相交的有…...

QOpenGLWidget视频画面上绘制矩形框

一、QPainter绘制 在QOpenGLWidget中可以绘制&#xff0c;并且和OpenGL的内容叠在一起。paintGL里面绘制完视频后&#xff0c;解锁资源&#xff0c;再用QPainter绘制矩形框。这种方式灵活性最好。 void VideoGLWidget::paintGL() {glClear(GL_COLOR_BUFFER_BIT);m_program.bi…...

Linux系统加固笔记

检查口令为空的账户 判断依据&#xff1a;存在则不符合 特殊的shell a./bin/false:将用户的shell设置为/bin/false&#xff0c;用户会无法登录&#xff0c;并且不会有任何提示信息b./sbib/nologin&#xff1a;nologin会礼貌的向用户发送一条消息&#xff0c;并且拒绝用户登录…...

【Go万字洗髓经】Golang中sync.Mutex的单机锁:实现原理与底层源码

本章目录 1. sync.Mutex锁的基本用法2. sync.Mutex的核心原理自旋到阻塞的升级过程自旋CAS 饥饿模式 3. sync.Mutex底层源码Mutex结构定义全局常量Mutex.Lock()方法第一次CAS加锁能够成功的前提是&#xff1f;竞态检测 Mutex.lockSlow()lockSlow的局部变量自旋空转state新值构造…...

npm前端模块化编程

1. 代码编写 使用npm和Webpack进行前端模块化编程的完整案例。这个案例将创建一个简单的网页&#xff0c;该网页显示一个标题和一个按钮&#xff0c;点击按钮会在控制台中打印一条消息。 步骤 1: 初始化项目 创建项目目录并初始化npm&#xff1a; mkdir my-modular-fronten…...

Django REST framework 源码剖析-认证器详解(Authentication)

Django REST framework 源码剖析-认证器详解(Authentication) 身份验证始终在视图的最开始运行&#xff0c;在权限和限制检查发生之前&#xff0c;以及在允许任何其他代码继续之前。request.user属性通常设置为contrib.auth包的user类的实例。request.auth属性用于任何其他身份…...

TCP/IP三次握手的过程,为什么要3次?

一&#xff1a;过程 第一次&#xff08;SYN&#xff09;&#xff1a; 客户端发送一个带有SYN标志的TCP报文段给服务器&#xff0c;设置SYN1&#xff0c;并携带初始序列号Seqx&#xff08;随机值&#xff09;&#xff0c;进入SYN_SENT状态。等待服务器相应。 第二次&#xff08…...

Centos6安装nerdctl容器运行时

Centos6安装nerdctl容器运行时 前言Centos6安装docker---失败--不可拉取镜像docker配置国内镜像加速 Centos6安装nerdctl-full容器管理工具为Centos6配置containerd服务开机自启动设置nerdctl自动补全 前言 本文写于2025年3月22日,因一些特殊业务需要用到Centos6Docker,但Cent…...

登录验证码的接口实习,uuid,code.

UID是唯一标识的字符串,下面是百度百科关于UUID的定义&#xff1a; UUID是由一组32位数的16进制数字所构成&#xff0c;是故UUID理论上的总数为16322128&#xff0c;约等于3.4 x 10^38。也就是说若每纳秒产生1兆个UUID&#xff0c;要花100亿年才会将所有UUID用完。 UUID的标准…...

用fofa语法搜索漏洞

FOFA是一款非常强大的搜索引擎 关于对于fofa的描述是&#xff1a;FOFA&#xff08;网络空间资产检索系统&#xff09;是世界上数据覆盖更完整的IT设备搜索引擎&#xff0c;拥有全球联网IT设备更全的DNA信息。 探索全球互联网的资产信息&#xff0c;进行资产及漏洞影响范围分析…...

设计一个基于机器学习的光伏发电功率预测模型,以Python和Scikit - learn库为例

下面为你设计一个基于机器学习的光伏发电功率预测模型&#xff0c;以Python和Scikit - learn库为例。此模型借助历史气象数据和光伏发电功率数据来预测未来的光伏发电功率。 模型设计思路 数据收集&#xff1a;收集历史气象数据&#xff08;像温度、光照强度、湿度等&#xf…...

20242817李臻《Linux⾼级编程实践》第6周

20242817李臻《Linux⾼级编程实践》第6周 一、AI对学习内容的总结 Linux进程间通信&#xff08;IPC&#xff09; 1. 进程间通信基本概念 作用: 数据传输&#xff1a;进程间传递数据&#xff08;字节到兆字节级别&#xff09;。共享数据&#xff1a;多个进程操作同一数据&…...

Vue 3中的Provide与Inject

在Vue 3中&#xff0c;provide和inject机制为组件间的通信提供了一种新的方式。不同于传统的父子组件通过props传递数据的方式&#xff0c;provide和inject允许祖先组件向其所有子孙组件提供数据&#xff0c;而无需通过中间层手动传递。这使得跨层级的组件通信变得更加直接和简…...

深入解析SQL2API平台:数据交互革新者

在数字化转型持续深入的当下&#xff0c;企业对数据的高效利用与管理的需求愈发迫切。SQL2API平台应运而生&#xff0c;成为助力企业突破数据交互困境的有力工具&#xff0c;特别是它由麦聪软件基于DaaS&#xff08;数据即服务&#xff09;产品创新衍生而来&#xff0c;备受业界…...

蓝桥杯算法题分享(二)

蓝桥杯算法题分享 本文将继续分享三道经典的蓝桥杯算法题&#xff0c;包括题目描述、解题思路和 Java 代码实现&#xff0c;帮助大家更好地理解算法的应用。对算法感兴趣的朋友可以点开我的主页查看我上周分享的另三道题。 第一题&#xff1a;次数差 题目描述 x 星球有 26 只…...

实战-MySQL5.7升级8.0遇到的四个问题

近期几个项目的MySQL由5.7升级到8.0&#xff0c;升级过程中遇到四个问题&#xff0c;记录下来分享一下&#xff1a; 第一个问题详见之前的文章&#xff1a; MySQL 5.7升级8.0报异常&#xff1a;处理新增关键字 第二个问题详见之前的文章&#xff1a; MySQL 5.7升级8.0报异常…...

为什么递归用栈?动态分配用堆?

文章目录 1. 区别2. 栈空间特点优点缺点 3. 堆空间特点优点缺点 4. 栈和堆的对比5. 总结 1. 区别 栈空间和堆空间是程序内存中的两块不同区域&#xff0c;分别用于不同的用途。 栈空间&#xff1a; 栈空间是由操作系统自动管理的内存区域&#xff0c;用于存储局部变量、函数…...