springboot将logback替换成log4j2

一 为何要替换成log4j2

1.1 log4j2的优点

log4j2使用了两种方式记录日志:AsyncAppender和AsyncLogger。

1.AsyncAppender使用队列异步记录日志,但是一旦队列已满,appender线程需要等待。
2.AsyncLogger是采用Disruptor,通过环形队列无阻塞队列作为缓冲,多生产者多线程的竞争是通过CAS实现,无锁化实现,可以降低极端大的日志量时候的延迟尖峰,Disruptor 可是号称一个线程里每秒处理600万订单的高性能队列。

注意的是: 使用AsyncLogger才会使用disruptor提高性能。如果使用的AsyncAppender,则使用的是类似logback一样的队列的方式做异步记录。

https://blog.csdn.net/m0_69057918/article/details/130972522

1.2 log4j2.xml如何读取application.yml中属性值

1.2.1 操作步骤

1.在application.properties 或者application.yml文件中配置

patcher.log=/data350/fengqxLogFile/patcher

2.编写监听器

复制代码
@Component
public class LoggerListener implements ApplicationListener<ApplicationEvent>, Ordered {
    @Override
    public void onApplicationEvent(ApplicationEvent applicationEvent) {
 
        if (applicationEvent instanceof ApplicationEnvironmentPreparedEvent) {
            ConfigurableEnvironment environment = ((ApplicationEnvironmentPreparedEvent) applicationEvent).getEnvironment();
            String filePath = environment.getProperty("patcher.log");
            if (StringUtils.isNotEmpty(filePath)) {
                System.err.println("=================" + filePath);
                System.setProperty("patcher.log", filePath);
            }
        }
    }
 
    @Override
    public int getOrder() {
        // 当前监听器的启动顺序需要在日志配置监听器的前面,所以此处减 1
        return LoggingApplicationListener.DEFAULT_ORDER - 1;
    }

3.在 /src/main/resources/META-INF/spring.factories进行加载监听器

org.springframework.context.ApplicationListener=com.longze.patcher.listener.MyLoggerListener

4.log4j2.xml进行使用配置是路径

springboot log4j2日志 配置路径_springboot指定log4j配置文件位置-CSDN博客

1.3 log4j&slf4j&log4j2需要的导入的包

Log4j实例:

import org.apache.log4j.Logger;

private static final Logger LOGGER = Logger.getLogger(X.class);

Slf4j实例:

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

private static final Logger logger = LoggerFactory.getLogger(X.class);

Log4j2的使用:

import org.apache.logging.log4j.LogManager;

import org.apache.logging.log4j.Logger;

private static final Logger logger = LogManager.getLogger(X.class);

升级log4j 2.x版本 缓存异步化配置解读 - 欲上九天揽月 - ITeye博客

1.4 整合log4j2需要引入的依赖与排除依赖

1.引入依赖

复制代码
<dependencies>
  <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
  <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>2.17.1</version>
      <scope>test</scope>
  </dependency>
  <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
  <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.17.1</version>
  </dependency>
  <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
  <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.17.1</version>
  </dependency>
  <dependency>
      <groupId>com.Imax</groupId>
      <artifactId>disruptor</artifactId>
      <version>2.17.1</version>
  </dependency>
</dependencies>

排除jar包:

相关推荐
企业数字化笔记18 小时前
多租户配额怎么控制?用量口径、并发预留与超额处理的实现方法
java·数据库·spring boot
WeiXin_DZbishe20 小时前
基于springboot装修风格选择系统的设计与开发-计算机毕设【课程设计】77964
java·vue.js·spring boot·后端·python·php·课程设计
十年Java程序媛21 小时前
Java 多线程基础与锁机制详解|进程线程、锁升级、synchronized 与 Lock 对比
java·开发语言·spring boot
Q26433650231 天前
【有源码】基于SpringBoot+Vue的居民健康体检与慢病干预管理系统-面向智慧医疗的体检预约与健康知识服务平台
java·vue.js·spring boot·mysql·毕业设计·javaweb·课程设计
撸串-研究生1 天前
基于Spring Boot的智慧社区垃圾分类与回收系统的设计与实现【附源码】
spring boot·后端·分类·垃圾分类·社区管理
ly76891 天前
PostgreSQL 流复制与高可用切换:主从延迟、同步提交与 Spring Boot 读写分离的边界
数据库·spring boot·postgresql·读写分离·流复制·高可用切换
技术小结-李爽1 天前
【工具】怎么在终端中启动springboot项目?
java·spring boot·后端·maven
Msshu1231 天前
PD快充诱骗取电芯片工作原理,XSP17诱骗取电5V9V12V15V20V功能测试
spring boot·spring cloud·sentinel·java-rocketmq·java-zookeeper·java-consul·java-activemq
乌暮1 天前
从 `println` 到生产级日志:Spring Boot 日志体系完全指南
java·开发语言·jvm·spring boot·后端·学习·面试
脉动数据行情1 天前
Java OkHttp 对接国际期货批量行情 SpringBoot 定时落库实践
java·spring boot·okhttp