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

spring boot2 使用log4j2

程序员文章站 2022-03-24 11:16:59
spring boot默认使用的是logback,看到好多地方说logback比log4j耗性能,具体么我也没试过,不过个人还是log4j用得更多。 先看pom依赖 spring boot日志提供了三种日志的实现, Java Util Logging,Log4J2和 Logback 而选择这其中的一 ......

spring boot默认使用的是logback,看到好多地方说logback比log4j耗性能,具体么我也没试过,不过个人还是log4j用得更多。

 

先看pom依赖

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

 

spring boot日志提供了三种日志的实现, java util logginglog4j2和 logback

而选择这其中的一个需要设置系统属性org.springframework.boot.logging.loggingsystem,一开始我是直接在启动类里面这样设置的

 system.setproperty("org.springframework.boot.logging.loggingsystem","log4j2");

然而发现并不是,后来看看代码发现这么几行

 

spring boot2 使用log4j2

试了试,真实设置是这样的

 system.setproperty("org.springframework.boot.logging.loggingsystem","org.springframework.boot.logging.log4j2.log4j2loggingsystem");

而使用不同的日志实现,系统会去默认加载以下文件

logback

logback-spring.xmllogback-spring.groovylogback.xml, or logback.groovy

log4j2

log4j2-spring.xml or log4j2.xml

jdk (java util logging)

logging.properties

 

 所以这时候需要定制log配置的话可以在resource下创建 log4j2.xml就可以了

<?xml version="1.0" encoding="utf-8"?>
<configuration status="warn">
    <properties>
        <property name="pid">????</property>
        <property name="log_exception_conversion_word">%xwex</property>
        <property name="log_level_pattern">%5p</property>
        <property name="log_dateformat_pattern">yyyy-mm-dd hh:mm:ss.sss</property>
        <property name="console_log_pattern">%clr{%d{${log_dateformat_pattern}}}{faint} %clr{${log_level_pattern}} %clr{${sys:pid}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:log_exception_conversion_word}</property>
        <property name="file_log_pattern">%d{${log_dateformat_pattern}} ${log_level_pattern} ${sys:pid} --- [%t] %-40.40c{1.} : %m%n${sys:log_exception_conversion_word}</property>
    </properties>
    <appenders>
        <console name="console" target="system_out" follow="true">
            <patternlayout pattern="${sys:console_log_pattern}" />
        </console>
    </appenders>
    <loggers>
        <logger name="org.apache.catalina.startup.digesterfactory" level="error" />
        <logger name="org.apache.catalina.util.lifecyclebase" level="error" />
        <logger name="org.apache.coyote.http11.http11nioprotocol" level="warn" />
        <logger name="org.apache.sshd.common.util.securityutils" level="warn"/>
        <logger name="org.apache.tomcat.util.net.nioselectorpool" level="warn" />
        <logger name="org.eclipse.jetty.util.component.abstractlifecycle" level="error" />
        <logger name="org.hibernate.validator.internal.util.version" level="warn" />
        <logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
        <root level="info">
            <appenderref ref="console" />
        </root>
    </loggers>
</configuration>

这是官方默认的配置,下面是我自己改了后的

 

<?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="30">

    <properties>
        <property name="pid">????</property>
        <property name="log_exception_conversion_word">%xwex</property>
        <property name="log_level_pattern">%5p</property>
        <property name="log_dateformat_pattern">yyyy-mm-dd hh:mm:ss.sss</property>
        <property name="console_log_pattern">%clr{%d{${log_dateformat_pattern}}}{faint} %clr{${log_level_pattern}} %clr{${sys:pid}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:log_exception_conversion_word}</property>
        <property name="file_log_pattern">%d{${log_dateformat_pattern}} ${log_level_pattern} ${sys:pid} --- [%t] %-40.40c{1.} : %m%n${sys:log_exception_conversion_word}</property>
    </properties>
    <!--先定义所有的appender-->

    <appenders>

        <!--这个输出控制台的配置-->
        <console name="console" target="system_out" follow="true">
            <patternlayout pattern="${sys:console_log_pattern}" />
        </console>

        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->

        <!--<file name="log" filename="log/test.log" append="false">-->

            <!--<patternlayout pattern="%d{hh:mm:ss.sss} %-5level %class{36} %l %m - %msg%xex%n"/>-->

        <!--</file>-->

        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->

        <rollingfile name="rollingfileinfo" filename="./logs/info.log"

                     filepattern="./logs/$${date:yyyy-mm}/info-%d{yyyy-mm-dd}-%i.log">

            <!--控制台只输出level及以上级别的信息(onmatch),其他的直接拒绝(onmismatch)-->

            <thresholdfilter level="info" onmatch="accept" onmismatch="deny"/>

            <patternlayout pattern="[%d{hh:mm:ss:sss}] [%p] - %l - %m%n"/>

            <policies>

                <timebasedtriggeringpolicy/>

                <sizebasedtriggeringpolicy size="100 mb"/>

            </policies>

        </rollingfile>

        <rollingfile name="rollingfilewarn" filename="./logs/warn.log"

                     filepattern="./logs/$${date:yyyy-mm}/warn-%d{yyyy-mm-dd}-%i.log">

            <thresholdfilter level="warn" onmatch="accept" onmismatch="deny"/>

            <patternlayout pattern="[%d{hh:mm:ss:sss}] [%p] - %l - %m%n"/>

            <policies>

                <timebasedtriggeringpolicy/>

                <sizebasedtriggeringpolicy size="100 mb"/>

            </policies>

            <!-- defaultrolloverstrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->

            <defaultrolloverstrategy max="20"/>

        </rollingfile>

        <rollingfile name="rollingfileerror" filename="./logs/error.log"

                     filepattern="./logs/$${date:yyyy-mm}/error-%d{yyyy-mm-dd}-%i.log">

            <thresholdfilter level="error" onmatch="accept" onmismatch="deny"/>

            <patternlayout pattern="[%d{hh:mm:ss:sss}] [%p] - %l - %m%n"/>

            <policies>

                <timebasedtriggeringpolicy/>

                <sizebasedtriggeringpolicy size="100 mb"/>

            </policies>

        </rollingfile>
        <!-- sql输出文件 -->
        <rollingfile name="sql" filename="./logs/sql.log"
                     filepattern="./logs/$${date:yyyy-mm}/sql-%d{yyyy-mm-dd}-%i.log">
            <thresholdfilter level="debug" onmatch="accept" onmismatch="deny"/>

            <patternlayout pattern="[%d{hh:mm:ss:sss}] [%p] - %l - %m%n"/>

            <policies>

                <timebasedtriggeringpolicy/>

                <sizebasedtriggeringpolicy size="100 mb"/>

            </policies>

        </rollingfile>

    </appenders>

    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->

    <loggers>


        <logger name="org.apache.catalina.startup.digesterfactory" level="error" />
        <logger name="org.apache.catalina.util.lifecyclebase" level="error" />
        <logger name="org.apache.coyote.http11.http11nioprotocol" level="warn" />
        <logger name="org.apache.sshd.common.util.securityutils" level="warn"/>
        <logger name="org.apache.tomcat.util.net.nioselectorpool" level="warn" />
        <logger name="org.eclipse.jetty.util.component.abstractlifecycle" level="error" />
        <logger name="org.hibernate.validator.internal.util.version" level="warn" />
        <logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>

        <!--输出sql-->
        <logger name="com.qthl.wf.dao" level="debug" additivity="false">
            <appender-ref ref="console"/>
            <appender-ref ref="sql"/>
        </logger>
        <root level="info">
            <appender-ref ref="console"/>
            <appender-ref ref="rollingfileinfo"/>
            <appender-ref ref="rollingfilewarn"/>
            <appender-ref ref="rollingfileerror"/>
        </root>
    </loggers>

</configuration>