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…

日誌門面(日誌抽象層) 日誌實現
JCL、SLF4J、jboss-logging 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環境變量時發現)。

今天的事情比較多,所以內容比較少,以上…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章