SpringBoot项目如何自定义日志输出格式

Springboot项目有几种日志框架,默认是使用Logback日志框架,但我喜欢用Log4j2日志框架,因为Log4j2.性能较强,扩展性强,可自定义level,支持kafka4,数据稳定

在这里插入图片描述
默认输出日志格式如下图

在这里插入图片描述
我使用log4j2日志框架后的日志输出格式如下图

在这里插入图片描述
下面是使用log4j2日志框架设置日志输出格式的步骤

1、pom.xml文件中添加log4j2依赖,并排除掉spring默认的logback日志依赖

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

2、src/main/resources目录下创建log4j2-spring.xml文件
在这里插入图片描述
log4j2-spring.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!--设置log4j2的自身log级别为warn -->
<configuration status="warn">
    <properties>
    	<!--这里配置的是日志存到文件中的路径-->
        <Property name="log_path">logs</Property>
    </properties>
    <appenders>
      <!--输出格式布局,每个转换说明符以百分号(%)开头,'%'后面的转换字符有如下:-->
            <!--
            p (level) 日志级别
            c(logger) Logger的Name
            C (class) Logger调用者的全限定类名 ***
            d (date) 日期
            highlight 高亮颜色
            l (location) 调用位置 ***
            L (line) 行号
            m (msg/message) 输出的内容
            M (methode) 调用方法 ***
            maker marker的全限定名
            n 输出平台相关的换行符,'\n' '\r\n'
            pid (processId) 进程ID
            level (p)日志级别
            r JVM启动后经过的微秒
            t (tn/thread/threadName) 线程名称
            T (tid/threadId) 线程ID
            tp (threadPriority) 线程优先级
            x (NDC) 线程Context堆栈
            -->
        <console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}][%t][%c(类):%L(行)] %m%n"/>
        </console>
        <!-- 这里配置了普通日志的格式和存入文件的路径 -->
        <!-- 如果fileName中是"../info.log",代表日志存放在和项目同级下-->
        <RollingFile name="RollingFileInfo" fileName="${log_path}/info.log"
                     filePattern="${log_path}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <Filters>
               <ThresholdFilter level="INFO"/>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <PatternLayout pattern="[%d][%t][%c(类):%L(行)] %m%n"/> 
           <!--  <PatternLayout pattern="[%d][%t] -5level %m%n"/> -->
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="5 MB"/>
            </Policies>
        </RollingFile>
        <!-- 这里配置了警告日志的格式和存入文件的路径 -->
        <RollingFile name="RollingFileWarn" fileName="${log_path}/warn.log"
                     filePattern="${log_path}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
            <Filters>
              <ThresholdFilter level="WARN"/>
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
             <PatternLayout pattern="[%d][%t][%c(类):%L(行)] %m%n"/> 
            <!-- <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n"/> -->
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="5 MB"/>
            </Policies>
        </RollingFile>
        <RollingFile name="RollingFileError" fileName="${log_path}/error.log"
                     filePattern="${log_path}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
             <ThresholdFilter level="ERROR"/>
            <PatternLayout pattern="[%d][%t][%c(类):%L(行)] %m%n"/>
           <!--  <PatternLayout pattern="[%d][%t]  %-5level %m%n"/> -->
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="5 MB"/>
            </Policies>
        </RollingFile>
        <!-- 配置mongdb appender -->
    </appenders>
    <loggers>
    	<!-- 过滤redis重连日志 -->
	   	<logger name="io.lettuce.core.protocol" level="ERROR">
	       	<appender-ref ref="ERROR_FILE" />
	   	</logger>
        <!--过滤掉spring的一些无用的debug信息-->
        <logger name="org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport" level="Error"></logger>
        <logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" level="Error"></logger>
        <logger name="org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping" level="Error"></logger>
        <logger name="org.springframework.amqp.rabbit.connection.CachingConnectionFactory" level="Error"></logger>
        <logger name="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer" level="Error"></logger>
        <logger name="org.springframework.boot.web.servlet.FilterRegistrationBean" level="Error"></logger>
        <logger name="org.springframework.jmx.export.annotation.AnnotationMBeanExporter" level="Error"></logger>
        <root level="INFO">
            <appender-ref ref="Console"/><!-- 配置控制台输出日志 -->
            <appender-ref ref="RollingFileInfo"/><!-- 配置普通日志 -->
            <appender-ref ref="RollingFileWarn"/><!-- 配置警告日志 -->
            <appender-ref ref="RollingFileError"/><!-- 配置异常日志 -->
        </root>
    </loggers>
</configuration>

3、这样配置就好了,启动项目可以看到输出的日志信息,有对应的类,对应的行数,对应线程名称

在这里插入图片描述
普通日志、警告日志、异常日志信息存放的文件路径(log4j2-spring.xml文件中设置了)

在这里插入图片描述

注意:如果log4j2-spring.xml文件不是直接放在src/main/resources目录下,那就需要在application.properties文件中指明路径,如下图,我如果把log4j2-spring.xml文件放在src/main/resources/static目录下,配置如下,也可以设置日志输出等级

在这里插入图片描述
日志级别:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL

debug:代表程序调试日志
info:代表一般输出信息
warn:警告信息
error:异常信息
fatal:灾难性后果比如系统出错

欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感谢。觉得本文章有帮助到的,点个赞呗

猜你喜欢

转载自blog.csdn.net/qq_41936224/article/details/108791019