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


這一章主要說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地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM