当前位置: 移动技术网 > IT编程>开发语言>Java > spring boot2 使用log4j2

spring boot2 使用log4j2

2018年12月24日  | 移动技术网IT编程  | 我要评论

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和 

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

 system.setproperty("org.springframework.boot.logging.loggingsystem","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>

 

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网