美文网首页Java编程SpringBoot
SpringBoot系列之集成logback实现日志打印(篇二)

SpringBoot系列之集成logback实现日志打印(篇二)

作者: smileNicky | 来源:发表于2019-11-17 17:16 被阅读0次

    SpringBoot系列之集成logback实现日志打印(篇二)

    基于上篇博客SpringBoot系列之集成logback实现日志打印(篇一)之后,再写一篇博客进行补充

    logback是一款开源的日志框架,内核重写了,是基于log4j基础进行改良的。其官网为http://logback.qos.ch/index.html,logback在性能上有很大提升,拥有更多特性。

    • logback-core:是其它两个模块的基础模块
    • logback-classic:log4j的改良版本,实现了Slf4j API
    • logback-access:集成Servle环境时就需要logback了,可以提供Http访问的接口

    简单介绍一下日志级别,按照从低到高排序:trace < debug < info < warn < error,eg:假如日志级别为info,则只会打印info级别及其高级别的日志,所以在项目中,可以通过调高日志级别,打少点日志,反之,想打多点就调低日志级别

    SpringBoot支持的不同日志系统的配置文件:

    Logging System Customization
    Logback logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
    Log4j2 log4j2-spring.xml or log4j2.xml
    JDK (Java Util Logging) logging.properties

    从前面的学习,SpringBoot系列之日志框架使用教程,我们知道了SpringBoot默认集成的是logback的,所以本博客介绍一下logback自定义配置的基本用法

    SpringBoot官方的建议也是推荐使用logback-spring.xml版本的

    When possible, we recommend that you use the -spring variants for your logging configuration (for example, logback-spring.xml rather than logback.xml). If you use standard configuration locations, Spring cannot completely control log initialization.

    原因是为什么?我们在官网往下翻,可以发现:

    Because the standard logback.xml configuration file is loaded too early, you cannot use extensions in it. You need to either use logback-spring.xml or define a logging.config property.

    翻译过来就是大概意思就是logback.xml在SpringBoot启动之前就被加载了,也就是ApplicationContext启动之前就被加载了,很显然,这样是不可以加载到SpringBoot的一下高级配置,而logback-spring.xml是支持的,比如在官网就列举了如下两种高级拓展配置,这两种配置只能用logback-spring.xml才是可以使用的,logback.xml是不支持的

    在这里插入图片描述

    ok,profile-specific configuration指的就是多环境配置

    <springProfile name="staging">
        <!-- configuration to be enabled when the "staging" profile is active -->
    </springProfile>
    
    <springProfile name="dev | staging">
        <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
    </springProfile>
    
    <springProfile name="!production">
        <!-- configuration to be enabled when the "production" profile is not active -->
    </springProfile>
    

    例子,dev环境用一个日志格式,非dev环境用另外一种日志格式
    然后在application.properties,配置环境:spring.profiles.active= dev

    <!-- 打印到控制台 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <!-- 格式化日志内容-->
            <encoder>
                <springProfile name="dev">
                <pattern>${LOG_PATTERN}</pattern>
                </springProfile>
                <springProfile name="!dev">
                    <pattern>%d{yyyy-MM-dd HH24:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n</pattern>
                </springProfile>
            </encoder>
        </appender>
    

    ok,给出自己的logback-spring.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <configuration debug="false" scan="true">
        <!-- 日志级别 -->
        <springProperty scope="context" name="LOG_ROOT_LEVEL" source="logging.level.root" defaultValue="DEBUG"/>
        <!--  标识这个"STDOUT" 将会添加到这个logger -->
        <springProperty scope="context" name="STDOUT" source="log.stdout" defaultValue="STDOUT"/>
        <!-- 日志格式,%d:日期;%thread:线程名;%-5level:日志级别从左显示5个字符长度,列如:DEBUG;
            %logger{36}:java类名,例如:com.muses.taoshop.MyTest,36表示字符长度;%msg:日志内容;%n:换行 -->
        <property name="LOG_PATTERN"
                  value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
        <!-- root日志级别-->
        <property name="${LOG_ROOT_LEVEL}" value="DEBUG" />
        <!-- 日志跟目录 -->
        <property name="LOG_HOME" value="data/logs" />
        <!-- 日志文件路径-->
        <property name="LOG_DIR" value="${LOG_HOME}/%d{yyyyMMdd}" />
        <!-- 日志文件名称 -->
        <property name="LOG_PREFIX" value="portal" />
        <!-- 日志文件编码 -->
        <property name="LOG_CHARSET" value="utf-8" />
        <!-- 配置日志的滚动时间,保存时间为15天-->
        <property name="MAX_HISTORY" value="15" />
        <!-- 文件大小,默认为10MB-->
        <property name="MAX_FILE_SIZE" value="10" />
    
    
        <!-- 打印到控制台 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <!-- 格式化日志内容-->
            <encoder>
                <springProfile name="dev">
                <pattern>${LOG_PATTERN}</pattern>
                </springProfile>
                <springProfile name="!dev">
                    <pattern>%d{yyyy-MM-dd HH24:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n</pattern>
                </springProfile>
            </encoder>
        </appender>
        <!-- 打印所有日志,保存到文件-->
        <appender name="FILE_ALL"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_HOME}/all_${LOG_PREFIX}.log</file>
            <!-- 设置滚动策略,当日志文件大小超过${MAX_FILE_SIZE}时,新的日志内容写到新的日志文件-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 新的日志文件路径名称,%d:日期 %i:i是变量 -->
                <fileNamePattern>${LOG_DIR}/all_${LOG_PREFIX}%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <!-- 保存日志15天 -->
                <maxHistory>${MAX_HISTORY}</maxHistory>
                <timeBasedFileNamingAndTriggeringPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- 日志文件的最大大小 -->
                    <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <!-- 格式日志文件内容-->
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>${LOG_PATTERN}</pattern>
            </layout>
        </appender>
    
        <!-- 打印错误日志,保存到文件-->
        <appender name="FILE_ERR"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_HOME}/err_${LOG_PREFIX}.log</file>
            <!-- 设置滚动策略,当日志文件大小超过${MAX_FILE_SIZE}时,新的日志内容写到新的日志文件-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 新的日志文件路径名称,%d:日期 %i:i是变量 -->
                <fileNamePattern>${LOG_DIR}/err_${LOG_PREFIX}%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <!-- 保存日志15天 -->
                <maxHistory>${MAX_HISTORY}</maxHistory>
                <timeBasedFileNamingAndTriggeringPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- 日志文件的最大大小 -->
                    <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <!-- 格式日志文件内容-->
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>${LOG_PATTERN}</pattern>
            </layout>
        </appender>
    
        <!-- rest template logger-->
        <logger name="org.springframework.web.client.RestTemplate" level="DEBUG" />
        <logger name="org.springframework" level="DEBUG" />
    
        <!-- jdbc-->
        <logger name="jdbc.sqltiming" level="DEBUG" />
        <logger name="org.mybatis" level="DEBUG" />
    
        <!-- zookeeper-->
        <logger name="org.apache.zookeeper"    level="ERROR"  />
    
        <!-- dubbo -->
        <logger name="com.alibaba.dubbo.monitor" level="ERROR"/>
        <logger name="com.alibaba.dubbo.remoting" level="ERROR" />
    
        <!-- 日志输出级别 -->
        <root leve="${LOG_ROOT_LEVEL}">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE_ALL" />
            <appender-ref ref="FILE_ERR" />
        </root>
    
    </configuration>
    
    

    附录:
    logging manual:SpringBoot日志官方手册
    example source:日志配置github代码下载链接

    相关文章

      网友评论

        本文标题:SpringBoot系列之集成logback实现日志打印(篇二)

        本文链接:https://www.haomeiwen.com/subject/ilopictx.html