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>