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,注明来意)。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
88 5
|
28天前
|
XML Java API
Spring Boot集成MinIO
本文介绍了如何在Spring Boot项目中集成MinIO,一个高性能的分布式对象存储服务。主要步骤包括:引入MinIO依赖、配置MinIO属性、创建MinIO配置类和服务类、使用服务类实现文件上传和下载功能,以及运行应用进行测试。通过这些步骤,可以轻松地在项目中使用MinIO的对象存储功能。
|
30天前
|
消息中间件 Java Kafka
什么是Apache Kafka?如何将其与Spring Boot集成?
什么是Apache Kafka?如何将其与Spring Boot集成?
67 5
|
1月前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
44 1
|
1月前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
49 1
|
1月前
|
XML Java 数据库连接
SpringBoot集成Flowable:打造强大的工作流管理系统
在企业级应用开发中,工作流管理是一个核心组件,它能够帮助我们定义、执行和管理业务流程。Flowable是一个开源的工作流和业务流程管理(BPM)平台,它提供了强大的工作流引擎和建模工具。结合SpringBoot,我们可以快速构建一个高效、灵活的工作流管理系统。本文将探讨如何将Flowable集成到SpringBoot应用中,并展示其强大的功能。
289 1
|
1月前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
53 1
|
1月前
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
55 0
|
1月前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
44 1
|
1月前
|
XML 存储 Java
SpringBoot集成Flowable:构建强大的工作流引擎
在企业级应用开发中,工作流管理是核心功能之一。Flowable是一个开源的工作流引擎,它提供了BPMN 2.0规范的实现,并且与SpringBoot框架完美集成。本文将探讨如何使用SpringBoot和Flowable构建一个强大的工作流引擎,并分享一些实践技巧。
177 0