Spring Profiles可以在不一样的环境中使不一样的应用配置生效。@Component和@Configuration两个注解都可以经过@Profiles来标记。下面是例子:html
@Configuration @Profile("buxuewushu") public class ProductionConfiguration { // ... }
在配置文件中能够经过spring.profiles.active这个变量来控制哪一个Profiles生效。例如,能够在application.properties配置文件中配置以下:java
spring.profiles.active=buxuewushu1,buxuewushu --即经过@Profiles注解标记的名为buxuewushu和buxuewushu1的文件生效
固然也能够经过命令行的形式进行配置:--spring.profiles.active= buxuewushu1, buxuewushuweb
在启动文件运行以前能够经过SpringApplication设置须要使哪个配置生效,SpringApplication.setAdditionalProfiles(…),也能够经过Spring的ConfigurableEnvironment接口来配置。spring
SpringBoot使用 **Commons Logging**做为内部的日志门面,可是也提供了一系列的接口来实现扩展。默认的日志配置有,Java Util Logging,Log4J2和[Logback] (https://commons.apache.org/proper/commons-logging/),在这每一种的实现下,都能经过配置来实现针对于哪一些日志的输出。apache
SpringBoot默认的日志输出格式以下所示,默认输出级别是INFO。默认使用的是Logback进行记录日志的。api
2018-07-20 19:11:40.046 INFO 21758 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@db57326: startup date [Fri Jul 20 19:11:38 CST 2018]; root of context hierarchy 2018-07-20 19:11:40.093 INFO 21758 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto java.lang.String com.example.FirstSpringBoot.FirstSpringBootApplication.home() 2018-07-20 19:11:40.097 INFO 21758 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2018-07-20 19:11:40.097 INFO 21758 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
SpringBoot默认的日志级别是INFO,若是想打印其余级别的日志的话能够经过配置。日志级别的顺序是ERROR>WARN>INFO>DEBUG>TRANCE.第一种办法是经过在启动的时候进行参数的配置--debug。oracle
$ java -jar myapp.jar --debug
固然也能够经过配置文件的形式进行调整级别。debug=true,即输出为DEBUG级别的日志信息。app
默认状况下,SpringBoot仅仅在控制台中打印日志,不会将日志记录在文件中。若是想将日志输出在文件中的话,那么能够在配置文件中配置文件的路径。logging.file或者logging.path.下面介绍logging.file和logging.path的区别。命令行
logging.file | logging.path | 例子 | 描述 |
---|---|---|---|
none | none | none | 仅仅在控制台中输出日志 |
文件名 | none | buxuewushu.log | 会在项目的根目录下生成一个buxuewushu.log来记录日志 |
none | 文件夹的名字 | ./logs | 会在项目的根目录中生成一个logs文件夹,logs文件下会生成默认的spring.log来记录日志 |
当日志文件记录的数据达到必定量时,SpringBoot会将此文件进行压缩为.gz的压缩文件。SpringBoot默认的大小为10M。固然这个大小也能够经过logging.file.max-size进行配置,可是必须得带单位。线程
许多的日志系统可以被相应的配置文件所配置,或者经过在application.properties中配置Spring的环境变量进行配置logging.config。
能够经过org.springframework.boot.logging.LoggingSystem的系统变量的设置从而使用特定的日志系统,系统日志的value值应该是日志实现的全路径名。
因为日志的加载是在ApplicationContext建立以前的,因此不能经过@PropertySources和@Configuration进行配置。惟一的配置方式就是在系统的环境变量中。
不一样的日志系统所对应的配置文件以下:
日志名 | 文件名 |
---|---|
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 |
Java Util Logging在可执行jar包运行时,可能会形成类加载的问题,因此尽量避免在jar包执行时使用Java Util Logging
为了更好配置化,一些在properties中的配置被转化为了配置在系统中的变量。对应关系以下:
Spring配置变量 | 系统变量 | 描述 |
---|---|---|
logging.exception-conversion-word | LOG_EXCEPTION_CONVERSION_WORD | 记录异常时使用的转换字 |
logging.file | LOG_FILE | 用于默认日志配置在哪一个文件中 |
logging.path | LOG_PATH | 用于默认日志配置文件夹下 |
logging.file.max-size | LOG_FILE_MAX_SIZE | 日志文件中支持的最大容量 |
logging.file.max-history | LOG_FILE_MAX_HISTORY | 最大的已经被压缩的文件的数量 |
logging.pattern.console | CONSOLE_LOG_PATTERN | 在控制台上使用的日志模式 |
PID | PID | 当前的进程ID(若是可能,尚未被定义为OS环境变量时发现) |
SpringBoot为Logback的可扩展性提供了许多的帮助。可以在logback-spring.xml文件中进行配置想要扩展的内容。
因为logback.xml文件的加载时间太早了,因此不能讲扩展的内容配置在logback.xml中。
一般在开发过程当中,咱们根据不一样的环境进行配置不一样的日志级别。因此在配置文件中能够经过<springProfile>标签进行有选择的使具体哪一步分生效。例子以下,在logback-spring.xml进行配置
--想要的配置的具体内容在<springProfile>标签中进行编写 <springProfile name="staging"> <!-- 配置staging生效 --> </springProfile> <springProfile name="dev | staging"> <!-- 配置dev或者staging生效 --> </springProfile> <springProfile name="!production"> <!-- 配置除了production以外的生效 --> </springProfile>