springboot log4j2的配置和使用

1、导入log4j2依赖

	<!-- 引入log4j2  lombok 依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j2</artifactId>
		</dependency>
		<dependency>
			<groupId>com.lmax</groupId>
			<artifactId>disruptor</artifactId>
			<version>3.4.2</version>
		</dependency>
		<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>
		<!-- 引入log4j2  lombok  end依赖 -->

2、log4j2dev.xml配置 (放在resources下面)

 

本地路径和测试路径记得自己切换

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

    <Properties>
        <property name="log_pattern">%m%n</property>
        <property name="log_pattern_info">%m%n</property>

        <!-- 本地日志路径 -->
        <property name="basePath">D:/log/pingServer</property>

        <!-- 线上和测试服日志路径 -->
        <!--	<property name="basePath">/data/log/pingServer</property>-->

        <!-- 系统错误日志 -->
        <property name="systemerror">${basePath}/systemerror/systemerror.log
        </property>
        <property name="rollingfile_systemerror">${basePath}/systemerror/systemerror%d{yyyy-MM-dd}.log
        </property>

        <!-- 系统info日志 -->
        <property name="systeminfo">${basePath}/systeminfo/systeminfo.log
        </property>
        <property name="rollingfile_systeminfo">${basePath}/systeminfo/systeminfo%d{yyyy-MM-dd}.log
        </property>
    </Properties>

    <!--先定义所有的appender -->
    <appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--输出日志的格式 -->
            <PatternLayout pattern="[%X{taskId}] [%d{HH:mm:ss:SSS}] [%p] %m%n"/>
        </Console>

        <!-- 统一系统日志,错误日志等 -->
        <RollingFile name="RollingFileSystemError" fileName="${systemerror}"
                     filePattern="${rollingfile_systemerror}">
            <Filters>
                <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>

                <!--   <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL"/>
                  <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/> -->

            </Filters>
            <PatternLayout pattern="[%X{taskId}] [%d{HH:mm:ss:SSS}] [%p] %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>

        <RollingFile name="RollingFileSystemInfo" fileName="${systeminfo}"
                     filePattern="${rollingfile_systeminfo}">
            <Filters>
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="[%X{taskId}] [%d{HH:mm:ss:SSS}] [%p] %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>

        <!-- 业务日志 -->

        <RollingFile name="rollingfile_request_list_log"
                     filename="${basePath}/requestListLog/requestListLog.log" filePattern="${basePath}/requestListLog/requestListLog%d{yyyy-MM-dd}.log"
                     append="true">
            <ThresholdFilter level="info" onMatch="ACCEPT"
                             onMismatch="DENY" />
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
            <PatternLayout pattern="${log_pattern}" />
        </RollingFile>


    </appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
    <loggers>
        <!--过滤掉spring和hibernate的一些无用的debug信息 -->
        <logger name="org.springframework" level="INFO">
        </logger>
        <logger name="org.mybatis" level="INFO">
        </logger>

        <asyncRoot level="INFO">
            <AppenderRef ref="Console"/>
            <!-- 系统错误日志 -->
            <AppenderRef ref="RollingFileSystemError"></AppenderRef>
            <!-- 系统info日志 -->
            <AppenderRef ref="RollingFileSystemInfo"></AppenderRef>
        </asyncRoot>

        <!-- 业务日志 -->
        <AsyncLogger name="request_list_log" additivity="false" level="ALL">
            <AppenderRef ref="rollingfile_request_list_log" level="info"/>
        </AsyncLogger>


    </loggers>

</configuration>

2、yml中指定读取log4j2dev.xml

#sql打印
logging:
  level:
    com.qr.management.dao: debug #需要改成你自己的dao层路径

#指定读取log4j2文件
logging:
  config: 'classpath:log4j2dev.xml'

 

3、使用log4j2存储日志

温馨提示:打印日志路径请参考log4j2dev.xml中本地路径/测试路径配置

1、info级别 打印日志的路径(D:\log\pingServer\systeminfo)

    log.info("测试info日志!!!");

2、error级别 打印日志的路径(D:\log\pingServer\systemerror)

log.error("测试error日志!!!");

 3、自定义日志路径和日志文件名称   打印日志的路径(D:\log\pingServer\requestListLog)

1、log4j2dev.xml增加配置

filename:自定义存储日志的名称

filePattern:根据每天的日期来存储日志

     <!-- 业务日志 -->
        <RollingFile name="rollingfile_request_list_log"
                     filename="${basePath}/requestListLog/requestListLog.log" filePattern="${basePath}/requestListLog/requestListLog%d{yyyy-MM-dd}.log"
                     append="true">
            <ThresholdFilter level="info" onMatch="ACCEPT"
                             onMismatch="DENY" />
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
            <PatternLayout pattern="${log_pattern}" />
        </RollingFile>

     <!-- 业务日志 -->
        <AsyncLogger name="request_list_log" additivity="false" level="ALL">
            <AppenderRef ref="rollingfile_request_list_log" level="info"/>
        </AsyncLogger>

2、使用代码存储日志到自定义日志路径

​
    /**
     * 自定义日志存储
     * @param accId
     * @param areaId
     * @param resultTime
     */
    private void logSave(String accId,String areaId,long resultTime) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(System.currentTimeMillis()).append("\t");
        stringBuilder.append(accId).append("\t");
        stringBuilder.append(areaId).append("\t");
        stringBuilder.append(resultTime).append("\t");
        LogManager.getLogger("request_list_log").info(stringBuilder);
    }

​

自定义日志文件效果展示

posted @ 2021-08-25 16:55  难忘是想起  阅读(0)  评论(0)    收藏  举报  来源