Spring Boot对日志的处理,和我们平时的日志处理完全一致,通过logback.xml进行日志管理功能。为了简便,这里采用“Spring Boot构建框架”一章节使用的工程,讲述如何在Spring Boot中处理日志。

第一步,虽然Spring Bootapplication.properties配置文件提供了日志的配置,但是个人更倾向于旧的配置方式。在src/main/resources目录中增加logback.xml日志文件,文件内容如下(配置相对简单,个人请根据工程情况,进行相应的配置):

<configuration scan="true" scanPeriod="10 seconds">
    <include resource="org/springframework/boot/logging/logback/base.xml" />

    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}/info.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>${LOG_PATH}/info-%d{yyyyMMdd}.log.%i
    </fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>500MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <maxHistory>2</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
    <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n
    </Pattern>
</layout>
    </appender>

    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>ERROR</level>
</filter>
<File>${LOG_PATH}/error.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>${LOG_PATH}/error-%d{yyyyMMdd}.log.%i
    </fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>500MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <maxHistory>2</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
    <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n

    </Pattern>
</layout>
    </appender>
    
    <logger name="com.example" level="DEBUG">    
<appender-ref ref="baselog" />    
    </logger>
    
    <root level="INFO">
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
    </root>
    
</configuration>

注意:
1)控制台和日志文件的字符集
2)日志文件的存放位置,须要遵守Linux的命名规则

第二步,在application.properties中指定logback.xml和日志生成的路径,如下:

logging.config=classpath:logback.xml
logging.path=/workspace/log

第三步,新建HelloController类,具体内容如下:

package com.example;  
  
import org.slf4j.Logger;  
import org.slf4j.LoggerFactory;  
import org.springframework.web.bind.annotation.PathVariable;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  
  
@RestController  
public class HelloController {  
  
    protected static Logger logger=LoggerFactory.getLogger(HelloController.class);  
      
    @RequestMapping("/")  
    public String helloworld(){  
logger.debug("访问hello");  
return "Hello world!";  
    }  
      
    @RequestMapping("/hello/{name}")  
    public String helloName(@PathVariable String name){  
logger.debug("访问 helloName,Name={}",name);  
return "Hello "+name;  
    }  
}

注意:在添加引用时,日志的包一定是org.slf4j.Logger、org.slf4j.LoggerFactory类。

第四步,测试
1)运行主程序
2)在浏览器中依次输入

http://localhost:8080/
http://localhost:8080/hello/素文宅博客

3)由于我的工程在D盘所有log日志文件所在的目录找到D:/workspace/log文件夹下,日志文件的名称是在配置文件logback.xml中设置的。

application.properties可以配置日志相关属性
控制台输出
日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。

Spring Boot中默认配置ERROR、WARN和INFO级别的日志输出到控制台。您还可以通过启动您的应用程序--debug标志来启用“调试”模式(开发的时候推荐开启),以下两种方式皆可:
1)在运行命令后加入--debug标志,如:$ java -jar springTest.jar --debug
2)在application.properties中配置debug=true,该属性置为true的时候,核心Logger(包含嵌入式容器、hibernate、spring)会输出更多内容,但是你自己应用的日志并不会输出为DEBUG级别。

文件输出
默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件。如果要编写除控制台输出之外的日志文件,则需在application.properties中设置logging.filelogging.path属性。
1)logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log
2)logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log
如果只配置logging.file,会在项目的当前路径下生成一个 xxx.log 日志文件。如果只配置 logging.path,在 /var/log文件夹生成一个日志文件为 spring.log

注意:二者不能同时使用,如若同时使用,则只有logging.file生效。默认情况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件,默认级别为:ERROR、WARN、INFO。

级别控制
所有支持的日志记录系统都可以在Spring环境中设置记录级别(在application.properties中设置)
格式为:'logging.level.* = LEVEL'
logging.level:日志级别控制前缀,*为包名或Logger名
LEVEL:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF

实例:

logging.level.com.dudu=DEBUG:com.example包下所有class以DEBUG级别输出
logging.level.root=WARN:root日志以WARN级别输出


自定义日志配置
由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的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特有的配置项。

关注下方微信公众号“Java精选”(w_z90110),回复关键词领取资料:如Mysql、Hadoop、Dubbo、Spring Boot等,免费领取视频教程、资料文档和项目源码。

Java精选专注程序员推送一些Java开发知识,包括基础知识、各大流行框架(Mybatis、Spring、Spring Boot等)、大数据技术(Storm、Hadoop、MapReduce、Spark等)、数据库(Mysql、Oracle、NoSQL等)、算法与数据结构、面试专题、面试技巧经验、职业规划以及优质开源项目等。其中一部分由小编总结整理,另一部分来源于网络上优质资源,希望对大家的学习和工作有所帮助。

评论

  1. #1

    菜鸟学霸 (2017/11/03 15:14:02)回复
    感谢大神的教程,到这里基本我的demo就搭建完了

    路人甲 (2017/11/06 09:00:54)回复
    嗯,好好学。有关spring boot相关问题欢迎留言,我会及时解答。

分享:

支付宝

微信