SpringBoot 使用log4j2的配置过程

目录
  • 前言
    • 日志接口(slf4j)
    • 日志实现(log4j、logback、log4j2)
  • 配置过程
    • 涉及的POM部分文件

前言

日志接口(slf4j)

slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j、logback)。

接口用于定制规范,可以有多个实现,使用时是面向接口的(导入的包都是slf4j的包而不是具体某个日志框架中的包),即直接和接口交互,不直接使用实现,所以可以任意的更换实现而不用更改代码中的日志相关代码。

日志实现(log4j、logback、log4j2)

Log4j:Apache的一个开源项目,可以控制日志信息输送的目的地是控制台、文件、GUI组件等,可以控制每一条日志的输出格式,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。虽然已经停止维护了,但目前绝大部分企业都是用的log4j。

LogBack:logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现。

Log4j2:Log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能比log4j 1.x提高10倍,并解决了一些死锁的bug,而且配置更加简单灵活。

配置过程

springboot默认是用logback的日志框架的,所以要在pom中配置排除logback。这里需要注意的是,其实不止一处使用了logback,所以要在starter中统一排除,然后引入log4j2。

涉及的POM部分文件

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion><!-- springboot默认是用logback的日志框架的 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency> <!-- 引入log4j2依赖 -->
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

log4j2配置文件,默认命名为log4j2.xml。 程序会会自动加载,如果命名为log4j2-xx.xml。需要在在SpringBoot配置文件application.properties中引入该配置文件,增加一行:logging.config=classpath:log4j2-xx.xml

<?xml version="1.0" encoding="UTF-8" ?>

<Configuration status="WARN" monitorInterval="1800">

    <!--变量配置-->
    <Properties>
        <!--应用名称-->
        <property name="APP_NAME">sky-hello</property>
        <!--日志存放路径-->
        <property name="LOG_PATH">./logs/${APP_NAME}</property>
        <!--日志备份路径-->
        <property name="LOG_BACKUP_PATH">${LOG_PATH}/backup</property>
        <!--日志输出格式-控制台-->
        <property name="PATTERN_CONSOLE">%d{yyyy-MM-dd HH:mm:ss.SSS} | %blue{%traceId} | %highlight{%-5p} | %magenta{${sys:PID}} | %yellow{%t} | %cyan{%l} : %msg%n</property>
        <!--日志输出格式-文件-->
        <property name="PATTERN_FILE">%d{yyyy-MM-dd HH:mm:ss.SSS} | %traceId | %-5p | ${sys:PID} | %t | %l : %msg%n</property>
    </Properties>

    <!--定义日志输出目的地,内容和格式等-->
    <Appenders>

        <!--可归档文件
            1. fileName: 日志存储路径
            2. filePattern: 历史日志封存路径。其中%d{yyyy-MM-dd}表示了日志的时间单位是天,log4j2自动识别zip等后缀,表示历史日志需要压缩
        -->
        <RollingFile name="RollingFile" fileName="${LOG_PATH}/${APP_NAME}.log" filePattern="${LOG_BACKUP_PATH}/$${date:yyyy-MM}/${APP_NAME}-%d{yyyy-MM-dd}_%i.log.zip">
            <!--输出日志的格式, 不设置默认为:%m%n-->
            <PatternLayout pattern="${PATTERN_FILE}"/>
            <!--只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--归档设置-->
            <Policies>
                <!--按时间间隔归档:
                    1. interval=时间间隔, 单位由filePattern的%d日期格式指定, 此处配置代表每一天归档一次
                    2. modulate="true" 是否对interval取模,决定了下一次触发的时间点
                -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                <!-- 按照日志文件的大小: size表示当前日志文件的最大size,支持单位:KB/MB/GB-->
                <SizeBasedTriggeringPolicy size="50MB"/>
            </Policies>
            <!-- 历史日志配置: 该属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
            <DefaultRolloverStrategy max="30"/>
        </RollingFile>

        <!--错误信息单独归档-->
        <RollingFile name="RollingFileError" fileName="${LOG_PATH}/${APP_NAME}-error.log" filePattern="${LOG_BACKUP_PATH}/$${date:yyyy-MM}/${APP_NAME}-error-%d{yyyy-MM-dd}_%i.log.zip">
            <PatternLayout pattern="${PATTERN_FILE}"/>
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="50MB"/>
            </Policies>
        </RollingFile>
    </Appenders>

    <!--Loggers配置-->
    <Loggers>

        <!--
        注意点:
        1. logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等:
           (1). name: 用来指定该logger所适用的类或者类所在的包全路径,继承自Root节点.
           (2). AppenderRef:关联的Appender, 只有定义了logger并引入的appender,appender才会生效
           (3). additivity: logEvent的传递性。true LogEvent处理后传递给父Logger打印。false LogEvent处理后不再向上传递给父Logger(解决日志重复输出问题)
           (4). logger配置的level必须高于或等于Appenders中ThresholdFilter配置的过滤level, 否则会造成信息丢失
        2. root配置日志的根节点
        -->

        <!-- 同步日志配置-->
        <logger name="com.sky.hello.mapper" level="debug" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
            <AppenderRef ref="RollingFileError"/>
        </logger>

        <root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
            <AppenderRef ref="RollingFileError"/>
        </root>

    </Loggers>

</Configuration>

代码中使用

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private final Logger log = LoggerFactory.getLogger(this.getClass());

log.info("info")

最后附加 log4j的格式配置参数

%n - 换行

%m - 日志内容,输出代码中指定的日志信息

%p - 日志级别(FATAL,   ERROR,   WARN,   INFO,   DEBUG   or   custom)

%r - 程序启动到现在的毫秒数

%% -  输出一个"%" 字符

%t - 当前线程名

%d - 日期和时间, 常用的格式有 %d{DATE}, %d{ABSOLUTE}, %d{HH:mm:ss,SSS}, %d{ddMMyyyy HH:mm:ss,SSS}

%l - 同 %F%L%C%M

%F - java源文件名

%L - java源码行数

%C - java类名,%C{1} 输出最后一个元素

%M - java方法名

到此这篇关于SpringBoot 使用log4j2的配置的文章就介绍到这了,更多相关SpringBoot log4j2配置内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot log4j2不能打印框架错误日志的解决方案

    springboot log4j2为什么不能打印框架错误日志 问题 使用springboot时老的框架使用的是log4j2,为了兼容不能够使用logback,按照网上的教程导入了log4j2但是不能够输入框架错误日志,例如bean命名重复,springmvc url映射重复,这些都是开发中所需要的友好提示 解决方案 怎么出现的问题,就不详细描述了,原因是我引入的log42是散件不是基于springboot集成配置的,导致只能够输出基本信息,原理我会在 一个月后左右探究完毕补充. 下面我说说怎么正

  • Springboot整合log4j2日志全解总结

    在项目推进中,如果说第一件事是搭Spring框架的话,那么第二件事情就是在Sring基础上搭建日志框架,我想很多人都知道日志对于一个项目的重要性,尤其是线上Web项目,因为日志可能是我们了解应用如何执行的唯一方式. 在18年大环境下,更多的企业使用Springboot和Springcloud来搭建他们的企业微服务项目 ,此篇文章是博主在实践中用Springboot整合log4j2日志的总结. 常用日志框架 java.util.logging:是JDK在1.4版本中引入的Java原生日志框架 Lo

  • springboot2.x只需两步快速整合log4j2的方法

    前言 本文详细介绍如何使用spring-boot2.x快速整合log4j2日志框架. spring-boot2.x使用logback作为默认日志处理库,因此我们除了要引用log4j2之外,还要去除logback的依赖 1.依赖库 maven方式: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifac

  • SpringBoot集成slf4j+log4j2的示例代码

    本文介绍了SpringBoot集成slf4j+log4j2的示例代码,分享给大家,具体如下: Maven依赖 <!--增加log4j2依赖↓--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency&g

  • springboot log4j2日志框架整合与使用过程解析

    目录 一.引入maven依赖 二.添加配置文件log4j2-spring.xml 三.自定义配置文件 四.测试一下 一.引入maven依赖 Spring Boot默认使用LogBack,但是我们没有看到显示依赖的jar包,其实是因为所在的jar包spring-boot-starter-logging都是作为spring-boot-starter-web或者spring-boot-starter依赖的一部分.如果这里要使用Log4j2,需要从spring-boot-starter-web中去掉sp

  • SpringBoot2 集成log4j2日志框架的实现

    前言 Log4j2是 Log4j 的进化版本,并提供了许多 Logback 可用的改进,同时解决了 Logback 体系结构中的一些固有问题.而且日志处理中我们会用到kafka作为日志管道.而kafka客户端依赖与Logback的兼容不是很完美,你可以选择排除依赖冲突或者使用Log4j2 . <!-- more --> 排除Logback依赖 Spring Boot 2.x默认使用Logback日志框架,要使用 Log4j2必须先排除 Logback. <dependency> &

  • SpringBoot 使用log4j2的配置过程

    目录 前言 日志接口(slf4j) 日志实现(log4j.logback.log4j2) 配置过程 涉及的POM部分文件 前言 日志接口(slf4j) slf4j是对所有日志框架制定的一种规范.标准.接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j.logback). 接口用于定制规范,可以有多个实现,使用时是面向接口的(导入的包都是slf4j的包而不是具体某个日志框架中的包),即直接和接口交互,不直接使用实现,所以可以任意的更换实现而不用

  • log4j2 RollingRandomAccessFile配置过程

    log4j2 RollingRandomAccessFile配置 一.需求背景 1. 日志按小时压缩成zip文件. 2. 仅保存距离当前时间最近24小时的历史压缩文件. 3. 压缩封存的zip文件,按照零点为参考点纠偏. 4. 将com.roadway.acceptor.base.DebugUtils类的日志输出到指定文件,且不再输出到其他文件. 二.log4j2 配置实现 <?xml version="1.0" encoding="UTF-8"?> &

  • springboot 整合 seata的配置过程

    前言: 小编引入的图片和文字描述都是来自于尚硅谷的视频讲解,在此感谢尚硅谷的老师,同时也结合 seata文档官方文档进行整合 项目地址(gitee): https://gitee.com/qinenqi/online springboot整合 seata 整合配置 online-project 这个服务调用 online-coupon这个服务 在 这两个被整合的服务对用的数据库中分别 创建 UNDO_LOG 表 -- 注意此处0.3.0+ 增加唯一索引 ux_undo_log CREATE TA

  • Springboot集成graylog及配置过程解析

    graylog配置 springboot配置 依赖 compile group: 'de.siegmar', name: 'logback-gelf', version: '2.0.0' logback.xml <configuration> <!-- 配置控制台的输出日志 --> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> &l

  • springboot集成KoTime的配置过程

    目录 koTime功能 可视化展示 koTime是一个springboot项目性能分析工具,通过追踪方法调用链路以及对应的运行时长快速定位性能瓶颈. 在pom.xml文件中引入 <dependency>     <groupId>cn.langpy</groupId>     <artifactId>ko-time</artifactId>     <version>2.2.0</version>   </depen

  • springboot+vue实现websocket配置过程解析

    1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> <version>1.3.5.RELEASE</version> </dependency> 2.配置ServerEndpointExporter @Configuration

  • Springboot主程序类注解配置过程图解

    @SpringBootApplication 点进这个注解看 进去第一个注解@SpringBootConfiguration看,上面有Configuration注解 @Configuration 这是Spring的配置类注解, 说明这个类一个配置类,里面都是配置文件 进第二个注解@EnableAutoConfiguration, 顾名思义,这是允许自动配置生效的注解, 接下来进去看它. @EnableAutoConfiguration 进去后也有两个注解:第一个AutoConfiguration

  • 配置springboot项目使用外部tomcat过程解析

    这篇文章主要介绍了配置springboot项目使用外部tomcat过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在pom文件中添加依赖 <!--使用自带的tomcat--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifac

  • 手把手教你SpringBoot快速集成Swagger的配置过程

    导语 相信大家无论是做前端还是做后端的,都被接口接口文档所折磨过,前端抱怨接口文档和后端给的不一致,后端抱怨写接口文档很麻烦,所以Swagger就诞生了.直接配置即可自动生成接口文档,而且提供了高效的API测试 话不多说直接开干 导入SpringBoot集成Swagger所需要的依赖 <!--web方便测试--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g

  • springboot 中 druid+jpa+MYSQL数据库配置过程

    Druid来自于阿里的一个开源连接池能够提供强大的监控和扩展功能,Spring Boot默认不支持Druid和jpa,需要引入依赖. 1.引入依赖包 <!--druid--> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</art

随机推荐