SpringBoot入門(二):日誌及自定義屬性

秀得水亂流發表於2019-07-31

這一章主要說springboot中日誌的配置、自定義屬性的配置與讀取、分環境的yml配置檔案(如本地環境、測試環境、生產環境等)。比較偏向實際開發,較為實用,前面一章的一些基本建立在這裡就不多廢話了。

1. springboot的日誌配置

  在我們專案實際開發中,日誌是不可或缺的。只有巧用日誌才能快速發現線上問題並且定位線上問題並且解決!當然日誌也可用來平時的本地除錯,也可以快速定位程式碼的位置,跟debug搭配起來更好歐。

  而springboot裡面使用的是Logback日至框架,並用INFO級別輸出到控制檯(日誌四個級別優先順序從高到低分別是 ERROR、WARN、INFO、DEBUG

  1)新增日誌依賴(其實不用)

1 <dependency>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-starter-logging</artifactId>
4     <version>2.1.6.RELEASE</version>
5     <scope>compile</scope>
6 </dependency>    

    但是!這裡我們可以在pom.xml裡找到 spring-boot-starter-web 依賴,點進去找到 spring-boot-starter 依賴。對沒錯,就是它,它裡面已經引入了logger,所以我們不用手動新增logger。不信?點選去看

 

  

  2)日誌的使用

    a) 首先建立一個config包,在包下建立一個LogConfig類,供其他所有類繼承並且列印日誌。

1 public class LogConfig {
2     
3     protected static final Logger logger = LoggerFactory.getLogger(LogConfig.class);
4 }

    b) 接著建立一個controller包,在包下建立一個LogController類,測試日誌的列印情況。這裡我們分別輸出四個級別的日誌,觀察控制檯。

 1 @RestController
 2 public class LogController extends LogConfig {
 3     
 4     @RequestMapping("/log")
 5     public String showLog() {
 6         logger.debug("debug:Process in LogController.showLog method");
 7         logger.info("info:Process in LogController.showLog method");
 8         logger.warn("warn:Process in LogController.showLog method");
 9         logger.error("error:Process in LogController.showLog method");
10         return "springboot log";
11     }
12 }

  c) 啟動之後,在位址列輸入localhost:8080/log回車,檢視控制檯,發現只輸出了info、warn、error三條日誌,並沒有debug。其實細心的朋友已經發現了原因,因為我們發現springboot啟動時列印的日誌都是info級別的,這是因為預設是info級別的,debug優先順序低於info,當然不顯示了。

  

  3)日誌的配置

    我們線上上就會發現它們的日誌其實都是儲存下來的,那麼如何儲存日誌檔案呢,就要開啟配置檔案yml做相關配置了。

    a) file可以對日誌檔案命名。也可以定義建立的位置,file也可以加相對路徑,所以不用配path了,我的log檔案這樣配在了logger-resource專案下的log資料夾中命名為springboot-demo.log。重新啟動一下程式,就會飛發現log檔案已經生成了。

    b) level可以指定路徑配置log級別,但它是指定某個包下的級別。這裡我們指定了com.wlb下的所有都為debug級別,這樣再去看控制檯就會發現,原來的debug級別日誌也輸出了。

1 # 日誌配置
2 logging:
3   path:           #日誌路徑
4   file: spring-boot-logger-resource\log\springboot-demo.log #日誌名稱,這裡用相對路徑建立。可以不用path直接用file建立任何地方 
5   level:
6     # 指定路徑配置log級別
7     com:
8       wlb: debug

 

2. springboot的配置檔案分環境

  在專案中一定是分環境的,不像我們自己寫的小demo。一般分為本地環境、開發環境、測試環境、生產環境,這裡我們舉例兩種只模擬本地環境、測試環境。

  1)首先在yml相同位置複製貼上出兩個,分別叫application-dev.yml 和 application-test.yml分別模擬本地環境和測試環境。如圖:

  

  2)在 application-dev.yml中配置當前檔名為dev,代表本地環境

1 spring:
2   # 當前檔案
3   profiles: dev

    在application-test.yml中配置當前檔名為test,代表測試環境

1 spring:
2   # 當前檔案
3   profiles: test

    最後在application.yml中配置當前選定的配置檔名為dev,即代表當前專案使用dev檔案中的所有配置。當在測試環境時只需要將dev改成test即可。

1 spring:
2   profiles:
3     # 當前選定的配置檔案
4     active: dev

    就是這麼簡單就配置成功了,那麼如何驗證我們配置檔案分環境是否生效呢,讓我們結合下一個例子建立自定義屬性一起使用。

 

3. springboot的自定義屬性配置

  在實際專案中我們有一些類似於常量的值,但又不想寫入程式碼中,這樣不便於區分以及後期維護,那麼一般都會寫在專門的配置檔案中,便於後期修改維護。比如mysql配置使用者名稱密碼、靜態資源路徑、以及一些業務需求的配置,他們跟程式碼的關係不大,所以一般不和開發程式碼放在一起。接下來教你怎麼在springboot中寫自定義屬性的配置。

  1)首先建立entity包,在entity包下建立一個實體類ResourceEntity做自定義屬性配置。這個類要用@Component註解被spring管理起來,在需要自定義的屬性上加上@Value註解,這裡我們用com.resource + 屬性名做唯一區分。定義了資源url地址、資源埠、最大個數、最小個數四個屬性做測試。

 1 @Component
 2 public class ResourceEntity {
 3     
 4     @Value("${com.resource.resourceUrl}")
 5     private String resourceUrl;
 6     
 7     @Value("${com.resource.resourcePort}")
 8     private String resourcePort;
 9     
10     @Value("${com.resource.maxNum}")
11     private Integer maxNum;
12     
13     @Value("${com.resource.minNum}")
14     private Integer minNum;
15 
16     public String getResourceUrl() {
17         return resourceUrl;
18     }
19 
20     public void setResourceUrl(String resourceUrl) {
21         this.resourceUrl = resourceUrl;
22     }
23 
24     public String getResourcePort() {
25         return resourcePort;
26     }
27 
28     public void setResourcePort(String resourcePort) {
29         this.resourcePort = resourcePort;
30     }
31 
32     public Integer getMaxNum() {
33         return maxNum;
34     }
35 
36     public void setMaxNum(Integer maxNum) {
37         this.maxNum = maxNum;
38     }
39 
40     public Integer getMinNum() {
41         return minNum;
42     }
43 
44     public void setMinNum(Integer minNum) {
45         this.minNum = minNum;
46     }
47 }

  2)然後在application-dev.yml檔案中配置具體的自定義屬性值。這是本地環境配置檔案中的。

1 # 自定義配置
2 com:
3   resource:
4     resourceUrl: 192.168.0.1
5     resourcePort: 8888
6     maxNum: 100
7     minNum: 0

  3)再在application-test.yml檔案中配置測試環境的屬性值。這是測試環境配置檔案中的。

1 # 自定義配置
2 com:
3   resource:
4     resourceUrl: 192.168.0.2
5     resourcePort: 8889
6     maxNum: 50
7     minNum: 1

  4)建立ResourceController,用於頁面展示我們配置的屬性值。

 1 @RestController
 2 public class ResourceController {
 3     
 4     @Autowired
 5     private ResourceEntity resourceEntity;
 6     
 7     @RequestMapping("/resource")
 8     public ResourceEntity getResource() {
 9         return resourceEntity;
10     }
11 }

  5)啟動專案,在位址列輸入localhost:8080/resource並回車,這時看到頁面列印的json資料,正是我們在本地環境配置的屬性值。證實了自定義屬性的使用!

  6)在application.yml檔案中修改dev為test(將本地環境配置切換為了測試環境配置)接著啟動專案,在位址列輸入localhost:8080/resource並回車,這時看到頁面列印的json資料,是我們在測試環境配置的屬性值。證實了配置檔案分環境的使用!

就是這麼簡單,一個springboot 日誌及自定義屬性專案完成!最後附上github地址,下載原始碼。

Github地址

相關文章