目录

This is mola

Springboot配置logback在控制台输出日志

分享

在实际开发的过程中,我们常常会遇到复杂的日志需求。比如每天输出一个日志文件,比如将info和error的消息分别输出到两个文件中,还比如在控制台中我希望输出自定义的内容(如输出日志的类、等级、内容),并且将这些内容用不同的颜色在控制台显示出来。还比如我们需要定义某个包下的日志格式,这些都需要我们在Springboot项目中用xml格式的文件配置。

创建xml文件

我们在resource下新建一个xml文件,命名为logback-spring.xml。在springboot中,只有按照如下规则命名配置文件才能被正确加载

  • Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy

  • Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml

  • Log4j2:log4j2-spring.xml, log4j2.xml

  • JDK (Java Util Logging):logging.properties

定义控制台日志格式

首先在logback-spring.xml下写一个configuration标签

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
</configuration>

接着我们来定义控制台的输出格式,使用property定义常量,加入到根节点

<property name="CONSOLE_INFO_LOG_PATTERN" value="%white(%date{yyyy-MM-dd HH:mm:ss}) |%white(%-5level) |%white(%thread) |%white(%file:%line) |%cyan(%logger) |%blue(%msg%n)"/>

其中name为常量名,value为常量值,也就是我们需要定义的格式,%(颜色)为定义后一个括号内输出变量颜色值,%date表示输出时间,%level表示输出等级,%thread表示是哪个线程输出了这个日志。

接着我们需要在根节点加入一个appender标签

<!--控制台输出info-->
<appender name="consoleInfoLog" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>
            ${CONSOLE_INFO_LOG_PATTERN}
        </pattern>
    </layout>
</appender>

class定义为ConsoleAppender,layout的class定义为PatternLayout。在pattern中输入上面定义的格式,接着在根节点配置root标签,表示在所有包下生效,ref中写上appender的name,配置完毕

<!--使用配置,作用域为sell-->
<root level="info">
    <appender-ref ref="consoleInfoLog"/>
</root>

自定义包输出格式

在测试的过程中,我们常常会找不到自己输出的信息,而被其他输出的信息掩盖,此时可以给自己项目包下的输出的日志定义单独的格式

property:我们将包名加黄

<property name="PACKAGE_INFO_LOG_PATTERN" value="%white(%date{yyyy-MM-dd HH:mm:ss}) |%white(%-5level) |%white(%thread) |%yellow(%file:%line) |%cyan(%logger) |%blue(%msg%n)"/>

appender:只输出info信息,用filter过滤

<!--控制台输出sell包下的info-->
<appender name="packageAllInfo" class="ch.qos.logback.core.ConsoleAppender">
    <!--根据范围过滤-->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>
            ${PACKAGE_INFO_LOG_PATTERN}
        </pattern>
    </layout>
</appender>

上面配置的是root标签,表示所有包全部输出,这里我们配置logger覆盖root的配置,填写你自己的包名。

<logger name="com.xxx.xxx" level="DEBUG" additivity="false">
    <appender-ref ref="packageAllInfo" />
</logger>

配置完成,让我们看看效果

@Slf4j
public class TestLog {
    @Test
    public void testLog(){
        String name="测试logback";
        log.info(name);
    }
}

输出:

1558490814857061127.png

最终的配置文件       

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <property name="CONSOLE_INFO_LOG_PATTERN"
              value="%white(%date{yyyy-MM-dd HH:mm:ss}) |%white(%-5level) |%white(%thread) |%white(%file:%line) |%cyan(%logger) |%blue(%msg%n)"/>

    <property name="PACKAGE_INFO_LOG_PATTERN"
              value="%white(%date{yyyy-MM-dd HH:mm:ss}) |%white(%-5level) |%white(%thread) |%yellow(%file:%line) |%cyan(%logger) |%blue(%msg%n)"/>

    <property name="CONSOLE_INFO_ERROR_PATTERN"
              value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%red(%-5level) |%blue(%thread) |%blue(%file:%line) |%cyan(%logger) |%yellow(%msg%n)"/>

    <property name="FILE_LOG_PATTERN"
              value="%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n"/>

    <!--控制台输出sell包下的info-->
    <appender name="packageAllInfo" class="ch.qos.logback.core.ConsoleAppender">
        <!--根据范围过滤-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                ${PACKAGE_INFO_LOG_PATTERN}
            </pattern>
        </layout>
    </appender>

    <!--控制台输出info-->
    <appender name="consoleInfoLog" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                ${CONSOLE_INFO_LOG_PATTERN}
            </pattern>
        </layout>
    </appender>

    <!--使用配置,作用域为sell-->
    <root level="info">
        <appender-ref ref="consoleInfoLog"/>
    </root>

    <logger name="com.mola.sell" level="DEBUG" additivity="false">
        <appender-ref ref="packageAllInfo" />
    </logger>
</configuration>


0 条评论