对于开发而言,日志非常重要,有效的输出日志,可以极大的帮助定位问题,特别是定位线上问题。
1 SpringBoot对Logback的支持
SpringBoot支持Java Util Logging
、Log4J2
、Logback
等多种日志实现。默认情况下,使用Logback
。所以,开发中,可以容易集成Logback
,并且SpringBoot提供了一些默认的配置,可以很方便的将日志输出到控制台或者文件中。
使用Starter[spring-boot-starter-web]创建一个SpringBoot应用,创建一个maven项目,在pom.xml
中添加依赖:
复制代码 4.0.0 com.spingboot.one logback-demo 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-parent 2.0.4.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-maven-plugin
然后,创建包com.springboot.one
,并在该包下创建主类Application.java
package com.springboot.one;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}复制代码
启动后,就可以在控制台看到输出的日志:
2018-08-15 22:26:08.731 INFO 3820 --- [ main] com.springboot.one.Application : No active profile set, falling back to default profiles: default2018-08-15 22:26:09.119 INFO 3820 --- [ main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1b083826: startup date [Wed Aug 15 22:26:09 CST 2018]; root of context hierarchy2018-08-15 22:26:12.792 INFO 3820 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)2018-08-15 22:26:12.830 INFO 3820 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]复制代码
以上,可以清晰的看到日志的时间,级别,线程等信息。
2 配置Logback
在SpringBoot应用中,有两种方式配置日志:
- 在
application.properties
中进行配置 - 使用单独的logback配置文件
这两种方式都可以对Logback进行相关的配置,两个方式各有优劣,但是,实际开发中,比较推荐使用第二种方式进行配置,主要有以下优点:
- 与其它配置分离,日志配置集中于此文件中
- 配置比较灵活
2.1 将日志输出到控制台
接下来,在项目中,添加单独的logback配置文件:logbackd-emo\src\main\resources\logback-spring.xml
,注意配置文件的名称为logback-spring.xml
,遵循这个约定,SpringBoot会默认加载该配置文件。
复制代码
以上,通过配置将日志输出到控制台,将日志级别调成DEBUG级别,这里直接引用了SpringBoot内置的配置文件,当然这个也可以根据自己的需求重新配置。
2.2 将日志输出到文件
也可以将日志输出到指定的文件中,这里可以直接引用SpringBoot内置的配置文件:
复制代码
不过,这个配置文件功能过于简单,通常,在项目中都会自定义,比如,像这样:
复制代码 ${LOG_HOME}/${APP_NAME}-%d{yyyy-MM-dd}.log 30 ${FILE_LOG_PATTERN}
将日志输出文件,需要考虑更多内容:
- 日志文件的路径,在生产环境中,可能需要单独的分区。
- 日志文件的命名规则,使用日期命名可以方便查找。
- 日志的滚动策略,如果日志量不大,可以按天切割日志。
同时,在该配置中还对一些日志进行了级别的调整,减少无用的日志,对于定位问题非常重要。
3 根据环境加载日志配置
上述的的内容基本都是Logback的相关配置,SpringBoot对于日志配置还做了一些特殊的扩展,其中,有一个功能就特别有用,就是在日志配置中支持Profile特性,通过Profile就可以很容易实现根据环境加载日志配置。
比如,当前有三个环境,日志的输出要求各不相同:
- 生产环境:输出到文件
- 开发环境:输出到控制台
- 测试环境:输出到文件
那现在就可以这样配置:
复制代码
然后,在application.properties
中进行Profile的配置:
spring.profiles.active=prod复制代码
此时,就是运行在生产环境,日志就会输出到文件中。
4 小结
本文主要介绍了如何在SpringBoot中使用Logback输出日志,并且,还介绍了一个实用的技巧,就是如何根据环境加载日志配置。不过,实际的开发中,这些还远远不够,还有很多问题需要解决,比如:
- 如何收集多台服务器的日志
- 如何有效的存储日志
- 如何方便高效的查询日志
后续,会继续介绍更多的日志收集方案。关注我: