profile
简介
profile提供了应用的隔离,使其在某种特定的环境下才能生效,任何的@Component与@Configuration能够被@Profile标记限制其何时加载,如下代码所示:
@Configuration
@Profile("production")
public class ProductionConfiguration {
// ...
}
通常情况下,spring可以使用spring.profiles.active
Environment
去指定哪一个profile被激活。通常可以通过指定包含在apllication.properties配置中指定:代码如下:
pring.profiles.active=dev,hsqldb
也可以通过命令行的形式:--spring.profiles.active=dev,hsqldb
添加激活配置(active profiles)
spring.profiles.active 属性像其他属性一样,也提供了对应的优先级的顺序,优先级最高的获胜,可以通过在application.properties指定,然后在命名行替换。
有时候,通过添加active profile而不是替换他们更加有用。可以通过变量spring.profiles.include进行无条件的添加激活的变量。其对应的API也有添加对应的API的方式,查看setAdditionalProfiles()
方法。例如:当使用如下配置的时候:
---
my.property: fromyamlfile
---
spring.profiles: prod
spring.profiles.include:
- proddb
- prodmq
当使用--spring.profiles.active=prod进行激活的时候,proddb
与 prodmq
也将会被激活。
程序化设置
可以通过SpringApplication.setAdditionalProfiles(…)方法在程序运行前进行设置
具体化配置文件
可以通过@ConfigurationProperties具体化其配置变量
日志
简介
spring boot内部使用的使 Commons Logging日志,但是其可以留下了潜在日志接口的实现。默认的配置包括 Java Util Logging,Log4J2,与Logback,每一种情况下,都会被配置输出到控制台和可选的输入到文件。
默认情况下,如果使用“starter”,Logback 日志框架被使用,其他的相关的包也会包括,保证Java Util Logging, Commons Logging, Log4J, or SLF4J也能正常工作。
日志格式
默认的日志输出格式如下:
2014-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52 2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms 2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
输出项:
- 日志和时间,默认到毫秒
- 日志等级
ERROR
,WARN
,INFO
,DEBUG
, orTRACE
. - 进程ID
-
---
是区分日志消息的开发 - 线程名称:
- 日志名称
- 日志消息
日志等级调整
可以通过如下代码进行日志等级调整:
$ java -jar myapp.jar --debug
颜色代码输出
如果终端支持ASNI,颜色输出更加让其具有可读性,可以通过设置spring.output.ansi.enabled来支持。颜色代码是通过使用 %clr
来改变。例如%clr(%5p),其颜色与日志等级的对照如下列表
- 红色:FATAL,ERROR
- 黄色:WARNINING
- 绿色:INFO,debug,trace
也可以通过指定其颜色:如下代码:%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}
文件输出
默认情况下,不不会写文件,可以通过在application.properties中设置logging.file
或logging.path
来指定输出位置。
默认情况下,输出的为log,error,warning等级的日志,并且当其大于10M的时候,会重新写。可以通过指定属性logging.file.max-size
来改变默认大小。
日志等级
所有的日志系统都可以通过环境变量设置日志等级。其使用‘logging.level.*=LEVEL’ (其中level包括 TRACE, DEBUG, INFO, WARN, ERROR, FATAL, 或者 OFF)。其root可以通过root
logger 进行配置,代码如下
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
个性化日志配置
可以在根路径或者是spring环境中通过logging.config来指定日志信息。也可以通过指定org.springframework.boot.logging.LoggingSystem的类来指定用于实现日志的具体类。根据不同的日志系统,如下的日志将会被应用:
日志系统 | 个性化配置文件 |
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 |
(备注:1. 推荐使用带有-spring
的配置 2. 在使用JDKlogging的时候,避免使用executable jar执行)
为了帮助个性化,spring环境提供了一些公共的系统变量:
spring环境 | 系统变量 | 描述 |
logging.exception-conversion-word | LOG_EXCEPTION_CONVERSION_WORD | 当日志异常的时候使用 |
logging.file | LOG_FILE | 如果被使用,将会作为默认的日志配置 |
logging.file.max-size | LOG_FILE_MAX_SIZE | 最大的日志文件大小 |
logging.path | LOG_PATH | 日志路径 |
logging.pattern.console | CONSOLE_LOG_PATTERN | 在控制台的输出格式 |
logging.pattern.file | FILE_LOG_PATTERN | 指定其文件格式 |
logging.pattern.level | LOG_LEVEL_PATTERN | 输出日志的等级 |
PID | PID | 进程号 |
(备注:
1. 如果想使用占位符,可以使用spring boot的语法,而不是其框架自身的语法:既使用“:”处理
2. 可以通过配置logging.pattern.level=user:%X{user} %5p来打印调用用户的信息:代码运行结果后如下:
2015-09-30 12:30:04.031 user:someone INFO 22174 --- [ nio-8080-exec-0] demo.Controller Handling authenticated request
)
logback的扩展
可以通过在logback-spring.xml中进行扩展,进而提供一些更加高级的功能。(备注:由于logback.xml配置是加载太早,因此不能再里面扩展,只能通过logback-spring.xml进行扩展。不能通过log-backde的配置扫描进行配置,否则,会出错)
01.特定环境配置
标签<springProfile>
可以让你排除或包括基于触发的环境的一些配置。通过使用 <configuration>
的支持方式,使用name的方式指定要链接哪一个配置。对于多个链接的配置,可以使用“,”分隔,代码如下:
<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>
02. 环境属性
标签 <springProperty>
让你暴露Spring Environment
的属性供Logback使用。当其要链接到application.properties里面的值的时候,非常有用。其作为一种标准的logback标签使用。你通过指定变量属性的来源 source
,而不是直接指定值。你需要指定存储的范围(非local),如下代码所示:
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
<remoteHost>${fluentHost}</remoteHost>
...
</appender>
备注以上参考:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-profiles