Spring Boot 20天入門(day3)
@Conditional及其派生註解
原理:必須是@Conditional指定的條件成立,纔會給容器中添加組件,配置在裏面的所有內容才生效;
@Conditional派生註解 | 作用(判斷是否滿足指定要求) |
---|---|
@ConditionalOnjava | 系統的java版本是否符合 |
@ConditionalOnBean | 容器中存在指定Bean |
@ConditionalOnMissingBean | 容器中不存在指定Bean |
@ConditionalOnExpression | 滿足SpEl表達式指定 |
@ConditionalOnClass | 系統中有指定的類 |
@ConditionalOnMissingClass | 系統中沒有指定的類 |
@ConditionalOnSingleCandidate | 容器中只有一個指定的Bean,或者找個Bean是首選Bean |
@ConditionalOnProperty | 系統中指定的屬性是否有指定的值 |
@ConditionalOnResource | 類路徑下是否存在指定的資源文件 |
@ConditionalOnWebApplication | 當前工程是否是web工程 |
@ConditionalOnNotWebApplication | 當前工程不是web工程 |
@ConditionalOnJndi | JNDI存在指定項 |
Springboot與日誌
1、日誌框架
市面上的日誌框架
JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…
日誌門面(日誌抽象層) | 日誌實現 |
---|---|
Log4j 、JUL、Log4j2、Logback |
左邊選一個門面(抽象層)、右邊選一個實現;
Springboot : 底層是Spring框架,Spring框架默認使用JCL;
Springboot將日誌層進行了升級封裝,選用SLF4j和logback
2、SLF4j使用
給系統裏面導入slf4j和logback的實現jar;
每一個日誌的實現框架都有自己的配置文件。使用slf4j,配置文件還是做成日誌實現框架的配置文件;
如何讓系統中的所有日誌都統一到slf4j
1、使用中間包來替換原有的日誌框架;
2、導入slf4j的其他實現
3、Springboot日誌關係
Springboot最基本的依賴:starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
Springboot使用它來做日誌功能:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<scope>compile</scope>
</dependency>
Spring-boot-starter-logging的依賴關係,可以將其他的日誌框架統一轉換成slf4j(適配器模式)
那麼Springboot是如何進行轉換的呢,我們點開log4j-to-slf4j看一下:
其實是直接將log4j的實現由slf4j的實現替代,從而達到轉換的效果
總結:
1)、Springboot底層也是使用slf4j+logback的方式進行日誌記錄(2.x支持log4j)
2)、Springboot也把其他的日誌都替換成了slf4j
3)、通過一些中間替換包進行轉換(適配器模式)
4、日誌使用
1、默認配置
springboot默認給我們配置好了日誌
// 記錄器
Logger logger = LoggerFactory.getLogger(SpringLoggingApplicationTests.class);
@Test
void contextLoads() {
// 日誌級別;
// 由低到高,默認info起步,低於配置級別的日誌不會顯示
// 可以調整輸出的日誌級別。
logger.trace("這是track日誌。。");
logger.debug("這是debug日誌..");
logger.info("這是info日誌...");
logger.warn("這是warn日誌...");
logger.error("這是error...");
}
可以在配置文件中修改日期級別:
# logging.level.需要修改級別的包名=日誌級別
logging.level.com.github=trace
也可以在命令行手動改變日誌級別:
java -jar xxx.jar --trace
2、日誌格式
Spring Boot的默認日誌輸出類似於以下示例:
2020-05-17 15:16:28.552 INFO 10412 --- [ main] c.g.s.SpringLoggingApplicationTests : Starting SpringLoggingApplicationTests on LAPTOP-UPVRKKQD with PID 10412 (started by 93985 in D:\java\spring-logging)
2020-05-17 15:16:28.556 DEBUG 10412 --- [ main] c.g.s.SpringLoggingApplicationTests : Running with Spring Boot v2.2.2.RELEASE, Spring v5.2.2.RELEASE
2020-05-17 15:16:28.563 INFO 10412 --- [ main] c.g.s.SpringLoggingApplicationTests : No active profile set, falling back to default profiles: default
2020-05-17 15:16:31.056 INFO 10412 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-05-17 15:16:31.395 INFO 10412 --- [ main] c.g.s.SpringLoggingApplicationTests : Started SpringLoggingApplicationTests in 3.36 seconds (JVM running for 4.951)
從左到右依次是:
1)Date and Time : 日期和時間
2)Log Level :日誌級別
3)Process ID :進程id
4)— :分隔符
5)Thread Name :線程名字
6)Logger Name :日誌名稱,通常是類名
7)日誌信息
3、將日誌輸出到文件
默認情況下,Springboot只會在控制檯輸出日誌信息
若我們想要將日誌信息輸出到日誌文件中,有兩種方法:
1)、日誌輸出到一個文件中
將日誌信息輸出到項目根目錄下,一個叫spring.log的文件下
logging.file.name=spring.log
2)、日誌輸出到一個文件夾下
將日誌信息輸出到項目根目錄下,一個叫spring的文件夾下的log文件夾中的spring.log(Springboot的默認日誌文件)
logging.file.path=/spring/log
4、自定義日誌配置
優先級從左往右
日誌系統 | 自定義日誌配置 |
---|---|
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 |
爲了幫助進行自定義,一些其他屬性從Spring轉移 Environment到System屬性,如下表所述:
Spring Environment | 系統屬性 | 備註 |
---|---|---|
logging.exception-conversion-word | LOG_EXCEPTION_CONVERSION_WORD | 記錄異常時使用的轉換字 |
logging.file | LOG_FILE | 如果已定義,則在默認日誌配置中使用它。 |
logging.file.max-size | LOG_FILE_MAX_SIZE | 最大日誌文件大小(如果啓用了LOG_FILE)(僅支持默認的Logback設置。) |
logging.file.max-history | LOG_FILE_MAX_HISTORY | 要保留的最大歸檔日誌文件數(如果啓用了LOG_FILE)。(僅支持默認的Logback設置。) |
logging.path | LOG_PATH | 如果已定義,則在默認日誌配置中使用它。 |
logging.pattern.console | CONSOLE_LOG_PATTERN | 要在控制檯上使用的日誌模式(stdout)。(僅支持默認的Logback設置。) |
logging.pattern.dateformat | LOG_DATEFORMAT_PATTERN | 日誌日期格式的Appender模式。(僅支持默認的Logback設置。) |
logging.pattern.file | FILE_LOG_PATTERN | 要在文件中使用的日誌模式(如果LOG_FILE已啓用)。(僅支持默認的Logback設置。) |
logging.pattern.level | LOG_LEVEL_PATTERN | 呈現日誌級別時使用的格式(默認%5p)。(僅支持默認的Logback設置。) |
PID | PID | 當前進程ID(如果可能,則在未定義爲OS環境變量時發現)。 |
今天的事情比較多,所以內容比較少,以上…