Springboot整合log4j2-问题与配置(idea打印彩色日志信息)

本文介绍了如何在Springboot项目中整合log4j2,并解决在2.10版本后控制台无法显示彩色日志的问题。通过排除默认的logback依赖,配置log4j2.xml文件,以及在IDEA中设置VM options参数-Dlog4j.skipJansi=false,可以实现日志的彩色打印,提高日志可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们平时项目中都有使用到log4j这个日志框架,但是之前对日志的标签并没有什么认识,今天通过对对日志文件的书写,来认识log4j各个标签的含义,让平时在工作中更好配置自己日志文件。

1、首先引入依赖,springboot的默认日志logback,使用exclusion排除默认的依赖,如果不排除就会导致被多次绑定。

 <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>

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

2、将在application.properties中配置log4j2.xml配置的文件

logging.config=classpath:config/log4j2.xml

3、就是目前需要配置log4j2.xml的日志文件

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration  status="warn"  monitorInterval="500">

    <!--这里相当于配置变量,后面在 <Appenders>  标签引入 用${}-->
    <Properties>
        <Property name="LOG_HOME">logs</Property>
        <!-- 控制台默认输出格式,"%d":表示打印的时间 "%5level":日志级别,
        %thread 表示打印日志的线程 "%c":表示类 "%L":表示行号 "%msg" 表示打印的信息  %n 换行  %throwable 表示错误信息
        %style 和{bright,green} 结合表示展示颜色   %highlight
        所以影响日志输出的性能 -->
        <!--<Property name="PATTERN">[%style{%d{yyyy-MM-dd HH:mm:ss:SSS}}] |-%-5level [%thread] %c [%L] -| %msg%n</Property>-->
        <Property name="CONSOLE">[%style{%d{yyyy-MM-dd HH:mm:ss:SSS}}{bright,green}] | [%highlight{%5level}] [%thread] [%style{%c}{bright,yellow}] [%style{%L}{bright,blue}] -| %highlight{%msg}%n%style{%throwable}{red}</Property>
        <Property name="FILE">%date{yyy-MM-dd HH:mm:ss.SSS} %level [%file:%line] : %msg%n</Property>
    </Properties>


    <Appenders>
        <!--生成文件的文件名,当天生成日志 log.log ,保存其他天日志为log-%d{yyyy-MM-dd}.log-->
        <RollingFile name="file" fileName="${LOG_HOME}/log.log" filePattern="${LOG_HOME}/log-%d{yyyy-MM-dd}.log">
            <!--${FILE} 引入<Property> 标签的文件格式-->
            <PatternLayout pattern="${FILE}"/>
            <Policies>
                <!--基于时间的触发策略。该策略主要是完成周期性的log文件封存工作。有两个参数:
               interval,integer型,指定两次封存动作之间的时间间隔,modulate,boolean型,说明是否对封存时间进行调制。-->
                <!--设置每天打包日志一次-->
                <TimeBasedTriggeringPolicy modulate="true" interval="1"></TimeBasedTriggeringPolicy>
            </Policies>

            <DefaultRolloverStrategy>
                <!--要访问的目录的最大级别数。值为0表示仅访问起始文件,2表示能访问一下两级目录-->
                <Delete basePath="${LOG_HOME}" maxDepth="2">
                    <IfFileName glob="*/*.log">
                        <!--删除超过十天文件-->
                        <IfLastModified age="10d"/>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>


        <!--添加一个控制台追加器,添加之后在AppenderRef 中引用,就会生效-->
        <Console name="CONSOLE" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${CONSOLE}"/>
        </Console>

    </Appenders>

    <Loggers>


        <!-- 生产环境下,将此级别配置为适合的级别,以免日志文件太多或影响程序性能 -->
        <!--这里指代生效的日志级别和 输出的内容,这里代表生效的是 debug ,
        文件和控制台都会输出,如果是在环境留下file就可以了,file和CONSOLE 来自于 <Appenders> 配置的标签 -->
        <Root level="info">
            <AppenderRef ref="file"/>
            <AppenderRef ref="CONSOLE"/>
        </Root>

    </Loggers>
</configuration >

在Log4j 2.10以前的版本,pattern中配置%highlight属性是可以正常打印彩色日志的。
但是是更新到2.10版本以后,控制台中就无法显示彩色日志了,各种级别的日志混杂在一起,难以阅读。Log4j2默认关闭了Jansi(一个支持输出ANSI颜色的类库)。

IDEA中,点击右上角->Edit Configurations,在VM options中添加
-Dlog4j.skipJansi=false

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值