自定义日志配置 | 带你读《SpringBoot实战教程》之八-阿里云开发者社区

开发者社区> 开发与运维> 正文

自定义日志配置 | 带你读《SpringBoot实战教程》之八

简介: 本节重点介绍自定义日志配置

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《SpringBoot实战教程》,主讲人杨红艳,点击查看视频内容

自定义日志配置

通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。

根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:
• 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

Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项。

如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,可以通过logging.config属性指定自定义的名字:
logging.config=classpath:logging-config.xml
虽然一般并不需要改变配置文件的名字,但是如果你想针对不同运行时Profile使用不同的日志配置,这个功能会很有用。

<?xml version="1.0" encoding="UTF-8"?> 
    <configuration  scan="true" scanPeriod="60 seconds" debug="false">  
        <contextName>logback</contextName>  
        <property name="log.path" value="E:\\springboot\\info.log" />  
        <!--输出到控制台-->  
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">  
           <!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">  
                <level>ERROR</level>  
            </filter>-->  
            <encoder>  
                <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>  
            </encoder>  
        </appender>  
      
        <!--输出到文件-->  
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">  
            <file>${log.path}</file>  
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
                <fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern>  
            </rollingPolicy>  
            <encoder>  
                <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>  
            </encoder>  
        </appender>  
      
        <root level="info">  
            <appender-ref ref="console" />  
            <appender-ref ref="file" />  
        </root>  
      
        <!-- logback为java中的包 -->  
        <logger name="com.qianfeng.controller"/>  
        
        <!--additivity是否向上级loger传递打印信息-->  
        <logger name="com.qianfeng.controller.SpringController" level="WARN" additivity="false">  
            <appender-ref ref="console"/>  
        </logger>  
</configuration>  

根节点包含的属性:

• scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
• scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
• debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

:每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称。

:用来定义变量值的标签, 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。

:用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。
ThresholdFilter为系统定义的拦截器,例如我们用ThresholdFilter来过滤掉ERROR级别以下的日志不输出到文件中。如果不用记得注释掉,不然你控制台会发现没日志。

RollingFileAppender用于切分文件日志:

logback.%d{yyyy-MM-dd}.log:定义了日志的切分方式——把每一天的日志归档到一个文件中,
30:表示只保留最近30天的日志,以防止日志填满整个磁盘空间。同理,可以使用%d{yyyy-MM-dd_HH-mm}来定义精确到分的日志切分方式。
1GB用来指定日志文件的上限大小,例如设置为1GB的话,那么到了这个值,就会删除旧的日志。
节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。
用来设置某一个包或者具体的某一个类的日志打印级别、以及指定。仅有一个name属性,一个可选的level和一个可选的addtivity属性。

name:用来指定受此loger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。
• addtivity:是否向上级loger传递打印信息。默认是true。

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章