欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

小白的springboot之路(十二)、集成log4j2日志

程序员文章站 2023-09-28 20:46:26
0、前言 日志记录对系统来说必不可少,spring boot中常用的日志组件有log4j、logback、log4j2,其中logback是spring boot默认的,已自带;选用log4j2就可以,其他的不必去关注; 一、集成log4j2日志组件 1、pom依赖中去除默认的logback日志框架 ......

0、前言

  日志记录对系统来说必不可少,spring boot中常用的日志组件有log4j、logback、log4j2,其中logback是spring boot默认的,已自带;选用log4j2就可以,其他的不必去关注;

一、集成log4j2日志组件

1、pom依赖中去除默认的logback日志框架:

<dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-web</artifactid>

        <!-- 7-1 去掉自带的日志依赖-->
        <exclusions>
            <exclusion>
                <groupid>org.springframework.boot</groupid>
                <artifactid>spring-boot-starter-logging</artifactid>
            </exclusion>
        </exclusions>
    </dependency>

2、添加依赖

        <!-- 7-2、集成log4j2  -->
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-log4j2</artifactid>
        </dependency>
        <!-- 额外添加disruptor依赖,用于解决log4j2日志版本较低报错问题-->
        <dependency>
            <groupid>com.lmax</groupid>
            <artifactid>disruptor</artifactid>
            <version>3.4.2</version>
        </dependency>

3、增加日志配置文件log4j2-dev.xml

<?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="info" monitorinterval="30">
    <properties>
        <!--  输出路径  -->
        <property name="logpath">/log4j/logs/log/dev</property>
    </properties>
    <appenders>
        <console name="console" target="system_out">
            <patternlayout
                    pattern="[%d][%-5p][%t] %m (%f:%l)%n"/>
        </console>
        <rollingfile name="debug" filename="${logpath}/debug/erp_debug.log"
                     filepattern="${logpath}/debug/erp_debug_%d{yyyy-mm-dd}-%i.log">
            <filters>
                <thresholdfilter level="info" onmatch="deny" onmismatch="neutral"/>
                <thresholdfilter level="debug" onmatch="accept" onmismatch="deny"/>
            </filters>
            <patternlayout pattern="[%d][%-5p][%t] %m (%f:%l)%n"/>
            <policies>
                <timebasedtriggeringpolicy interval="24" modulate="true"/>
                <sizebasedtriggeringpolicy size="50 mb"/>\
            </policies>
            <defaultrolloverstrategy max="30">
                <delete basepath="${logpath}/debug" maxdepth="1">
                    <iffilename glob="erp_debug_*.log"/>
                    <iflastmodified age="15d"/>
                </delete>
            </defaultrolloverstrategy>
        </rollingfile>
        <rollingfile name="info" filename="${logpath}/info/erp_info.log"
                     filepattern="${logpath}/info/erp_info_%d{yyyy-mm-dd}-%i.log">
            <filters>
                <thresholdfilter level="warn" onmatch="deny" onmismatch="neutral"/>
                <thresholdfilter level="info" onmatch="accept" onmismatch="deny"/>
            </filters>
            <patternlayout pattern="[%d][%-5p][%t] %m (%f:%l)%n"/>
            <policies>
                <timebasedtriggeringpolicy interval="24" modulate="true"/>
                <sizebasedtriggeringpolicy size="50 mb"/>\
            </policies>
            <defaultrolloverstrategy max="30">
                <delete basepath="${logpath}/info" maxdepth="1">
                    <iffilename glob="erp_info_*.log"/>
                    <iflastmodified age="15d"/>
                </delete>
            </defaultrolloverstrategy>
        </rollingfile>
        <rollingfile name="warn" filename="${logpath}/warn/erp_warn.log"
                     filepattern="${logpath}/warn/erp_warn_%d{yyyy-mm-dd}-%i.log">
            <filters>
                <thresholdfilter level="error" onmatch="deny" onmismatch="neutral"/>
                <thresholdfilter level="warn" onmatch="accept" onmismatch="deny"/>
            </filters>
            <patternlayout pattern="[%d][%-5p][%t] %m (%f:%l)%n"/>
            <policies>
                <timebasedtriggeringpolicy interval="24" modulate="true"/>
                <sizebasedtriggeringpolicy size="50 mb"/>\
            </policies>
            <defaultrolloverstrategy max="30">
                <delete basepath="${logpath}/warn" maxdepth="1">
                    <iffilename glob="erp_warn_*.log"/>
                    <iflastmodified age="15d"/>
                </delete>
            </defaultrolloverstrategy>
        </rollingfile>
        <rollingfile name="error" filename="${logpath}/error/erp_error.log"
                     filepattern="${logpath}/error/erp_error_%d{yyyy-mm-dd}-%i.log">
            <filters>
                <thresholdfilter level="fatal" onmatch="deny" onmismatch="neutral"/>
                <thresholdfilter level="error" onmatch="accept" onmismatch="deny"/>
            </filters>
            <patternlayout pattern="[%d][%-5p][%t] %m (%f:%l)%n"/>
            <policies>
                <timebasedtriggeringpolicy interval="24" modulate="true"/>
                <!--   每个文件最大50m -->
                <sizebasedtriggeringpolicy size="50 mb"/>\
            </policies>
            <defaultrolloverstrategy max="30">
                <delete basepath="${logpath}/error" maxdepth="1">
                    <iffilename glob="erp_error_*.log"/>
                    <!-- 设置最大保存时间为15天-->
                    <iflastmodified age="15d"/>
                </delete>
            </defaultrolloverstrategy>
        </rollingfile>

    </appenders>
    <!--切换输出级别-->
    <loggers>
        <root level="info">
            <appenderref ref="console"/>
            <appenderref ref="debug"/>
            <appenderref ref="info"/>
            <appenderref ref="warn"/>
            <appenderref ref="error"/>
        </root>
    </loggers>
</configuration>

配置文件中增加配置:

#################### 7 log4j2  ###################
logging.config=classpath:log4j2-dev.xml
logging.level.org.springframework=info

 

4、使用

private static final logger logger = loggerfactory.getlogger(usercontroller.class);

    logger.info("未知异常!原因是:info");
    logger.error("未知异常!原因是:error");
    logger.warn("未知异常!原因是:warn");

简单用法,完毕~

微服务中,服务众多,分布在各个服务器中,我们一般不这样使用,我们一般使用elk来对日志进行统一收集和分析处理,elk后面再说