SpringBoot 集成log4j2

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: SpringBoot 集成log4j2


1. Log4j2优点

参考官方文档:https://logging.apache.org/log4j/2.x/

相比与其他的日志系统,log4j2丢数据的情况少;在多线程环境下,性能高于logback等10倍以上;利用jdk1.5并发的特性,减少了死锁的发生。

2. Log4j2日志级别

2.1 级别

在log4j2中, 共有8个级别,按照从低到高为:

ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。

  • All:最低等级的,用于打开所有日志记录。
  • Trace:是追踪,就是程序推进一下。
  • Debug:指出细粒度信息事件对调试应用程序是非常有帮助的。
  • Info:消息在粗粒度级别上突出强调应用程序的运行过程。
  • Warn:输出警告及warn以下级别的日志。
  • Error:输出错误信息日志。
  • Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志。
  • OFF:最高等级的,用于关闭所有日志记录。

程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少 。

2.2 视图

通过视图可以看到:

  • 左边竖栏是Event Level,右边横栏是LoggerConfig Level。
  • YES的意思就是这个event可以通过filter,NO的意思就是不能通过filter。
  • 可以看到,INFO级别在Event是无法被ERROR级别的LoggerConfig的filter接受的,所以,INFO信息不回被输出。

3. SpringBoot整合Log4j2配置

官方文档:https://docs.spring.io/spring-boot/docs/1.5.19.RELEASE/reference/htmlsingle/#howto-configure-log4j-for-logging

<!-- 排除 Spring-boot-starter 默认的日志配置 -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</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>
  <!-- 加上这个才能辨认到log4j2.yml文件 -->
  <dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
  </dependency>

4. log4j2.yml配置

  • application.yml 引入log4j2.yml
# log4j2 日志配置
logging:
  config: classpath:log4j2.yml
  • log4j2.yml配置
Configuration:
  status: WARN
  name: YAMLConfigTest
  properties:
    property:
      name: project.name
      value: vhr
  thresholdFilter:
    level: debug
  appenders:
    #只接受程序中DEBUG级别的日志进行处理
    Console:
      name: Console
      target: SYSTEM_OUT
      ThresholdFilter:
        level: DEBUG
        onMatch: ACCEPT
        onMismatch: DENY
      PatternLayout:
        Pattern: "[%d{HH:mm:ss.SSS}] %-5level %class{36} %L %M - %msg%xEx%n"
    #处理DEBUG级别的日志,并把该日志放到logs/debug.log文件中
    RollingFile:
      #打印出DEBUG级别日志,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档
      - name: RollingFileDebug
        fileName: ./logs/${project.name}/debug.log
        filePattern: "logs/${project.name}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"
        Filters:
          ThresholdFilter:
            - level: DEBUG
            - level: INFO
              onMatch: DENY
              onMismatch: NEUTRAL
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多100个
          max: 100
      #处理INFO级别的日志,并把该日志放到logs/info.log文件中
      - name: RollingFileInfo
        fileName: ./logs/${project.name}/info.log
        filePattern: "logs/${project.name}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"
        Filters:
          #只接受INFO级别的日志,其余的全部拒绝处理
          ThresholdFilter:
            - level: INFO
            - level: WARN
              onMatch: DENY
              onMismatch: NEUTRAL
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多100个
          max: 100
      #处理WARN级别的日志,并把该日志放到logs/warn.log文件中
      - name: RollingFileWarn
        fileName: ./logs/${project.name}/warn.log
        filePattern: "logs/${project.name}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"
        Filters:
          ThresholdFilter:
            - level: WARN
            - level: ERROR
              onMatch: DENY
              onMismatch: NEUTRAL
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多100个
          max: 100
      #处理error级别的日志,并把该日志放到logs/error.log文件中
      - name: RollingFileError
        fileName: ./logs/${project.name}/error.log
        filePattern: "logs/${project.name}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"
        ThresholdFilter:
          level: ERROR
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多100个
          max: 100
      #druid的日志记录追加器
      - name: druidSqlRollingFile
        fileName: ./logs/${project.name}/druid-sql.log
        filePattern: "logs/${project.name}/$${date:yyyy-MM}/druid-sql-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %L %M - %msg%xEx%n"
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多100个
          max: 100
  loggers:
    logger:
      #记录druid-sql的记录
      name: druid.sql.Statement
      level: debug
      additivity: false
      appender-ref:
        ref: druidSqlRollingFile
    #log4j2 自带过滤日志
    Logger:
      - name: org.apache.catalina.startup.DigesterFactory
        level: error
      - name: org.apache.catalina.util.LifecycleBase
        level: error
      - name: org.apache.coyote.http11.Http11NioProtocol
        level: warn
      - name: org.apache.sshd.common.util.SecurityUtils
        level: warn
      - name: org.apache.tomcat.util.net.NioSelectorPool
        level: warn
      - name: org.crsh.plugin
        level: warn
      - name: org.crsh.ssh
        level: warn
      - name: org.eclipse.jetty.util.component.AbstractLifeCycle
        level: error
      - name: org.hibernate.validator.internal.util.Version
        level: warn
      - name: org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration
        level: warn
      - name: org.springframework.boot.actuate.endpoint.jmx
        level: warn
      - name: org.thymeleaf
        level: warn
    root:
      level: INFO
      appender-ref:
        - ref: Console
        - ref: RollingFileInfo
        - ref: RollingFileWarn
        - ref: RollingFileError
        - ref: RollingFileDebug

实操可行,欢迎点赞、收藏、关注。技术交流➕企鹅:995062855(同vx,注明来意)。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
14天前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
202 4
|
3月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
499 5
|
4月前
|
前端开发
SpringBoot2.3.1集成Knife4j接口文档
SpringBoot2.3.1集成Knife4j接口文档
464 44
|
3月前
|
缓存 JSON 前端开发
第07课:Spring Boot集成Thymeleaf模板引擎
第07课:Spring Boot集成Thymeleaf模板引擎
397 0
第07课:Spring Boot集成Thymeleaf模板引擎
|
3月前
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
359 2
|
3月前
|
分布式计算 Java 大数据
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
157 2
|
3月前
|
存储 人工智能 Java
Springboot集成AI Springboot3 集成阿里云百炼大模型CosyVoice2 实现Ai克隆语音(未持久化存储)
本项目基于Spring Boot 3.5.3与Java 17,集成阿里云百炼大模型CosyVoice2实现音色克隆与语音合成。内容涵盖项目搭建、音色创建、音频合成、音色管理等功能,适用于希望快速掌握Spring Boot集成语音AI技术的开发者。需提前注册阿里云并获取API Key。
|
4月前
|
缓存 安全 Java
Shiro简介及SpringBoot集成Shiro(狂神说视频简易版)
Shiro简介及SpringBoot集成Shiro(狂神说视频简易版)
306 6
|
5月前
|
缓存 Java 数据库
SpringBoot集成Ehcache缓存使用指南
以上是SpringBoot集成Ehcache缓存的基本操作指南,帮助你在实际项目中轻松实现缓存功能。当然,Ehcache还有诸多高级特性,通过学习和实践,你可以更好地发挥它的威力。
462 20