SpringBoot中Log日志的集成
一、日志的分類
1、名字分類
- log4j :log for java (因為for和4讀音差不多,所以交log4j)
- logBack 日志說明
注意:springBoot默認集成了logback日志
2、日志分類
根日志:全域日志 rootLogger( springboot的日志級別:info)

子日志:包日志 logger
3、日志級別
OFF=》ERROR=》 WARNING=》INFO(springboot默認)=》DEBUG(mybatis默認級別)=》ALL級別越高輸出資訊越少
日志級別由低到高: 日志級別越高輸出的日志資訊越少

| 日志級別 | 使用場景 |
|---|---|
| DEBUG | debug級別用來記錄詳細的資訊,方便定位問題進行除錯,在生產環境我們一般不開啟DEBUG |
| INFO | 用來記錄關鍵代碼點的資訊,以便代碼是否按照我們預期的執行,生產環境通常會設定INFO級別 |
| WARNING | 記錄某些不預期發生的情況,如磁盤不足 |
| ERROR | 由于一個更嚴重的問題導致某些功能不能正常運行時記錄的資訊 |
| CRITICAL | 當發生嚴重錯誤,導致應用程式不能繼續運行時記錄的資訊 |
二、logback簡介
Logback是由log4j創始人設計的又一個開源日志組件,目前,logback分為三個模塊:
logback-core,logback-classic和logback-access,是對log4j日志展示進一步改進
1、 專案中日志分類
日志分為兩類
一種是rootLogger : 用來監聽專案中所有的運行日志 包括引入依賴jar中的日志
一種是logger : 用來監聽專案中指定包中的日志資訊
2、 java專案中使用
(1) logback組態檔
logback的組態檔必須放在專案根目錄中 且名字必須為logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--定義專案中日志輸出位置-->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!--定義專案的日志輸出格式-->
<!--定義專案的日志輸出格式-->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern> [%p] %d{yyyy-MM-dd HH:mm:ss} %m %n</pattern>
</layout>
</appender>
<!--專案中跟日志控制-->
<root level="INFO">
<appender-ref ref="stdout"/>
</root>
<!--專案中指定包日志控制-->
<logger name="com.baizhi.dao" level="DEBUG"/>
</configuration>
(2)具體類中使用日志
@Controller
@RequestMapping("user")
public class UserController {
private Logger logger = org.slf4j.LoggerFactory.getLogger(this.getClass());
@RequestMapping("findAll")
public String findAll(String name) {
logger.debug("debug接收的姓名是: "+name);
logger.info("info接收的姓名是: "+name);
logger.warn("warn接收的姓名是: "+name);
logger.error("error接收的姓名是: "+name);
return "index";
}
}
(3)使用默認日志配置
logging:
level:
root: debug
com.baizhi.dao: debug
path: /Users/whj/aa.log
file: bbb.log
三、SpringBoot中日志使用
1、將Springboot的日志默認級別改為debug
#開啟日志 如果級別:off(少)>error>warn>info>debug(多)>all
logging:
level:
root: debug
com.tjcu.controller: debug
com.tjcu.dao: debug

- 注意:因為springboot如果使用debug作為日志列印的東西太多了,所以改用info為默認日志級別,但是mybatis等使用的是debug作為默認日志級別,所以我們需要兼顧他的日志隔離級別
2、SpringBoot專案啟動就會有一個默認的日志物件:logger
- 先配置
com.tjcu.controller: debug
#開啟日志
logging:
level:
root: debug
com.tjcu.controller: debug
- controller里面使用日志物件
@Controller
@CrossOrigin
@ResponseBody
public class EmpController {
//在控制層定義日志物件
private static final Logger log = LoggerFactory.getLogger(EmpController.class);
@Autowired
private EmpService empService;
@RequestMapping("/emp/queryAll")
public List<Emp> queryall(){
List<Emp> emps = empService.showEmp();
for (Emp emp : emps) {
log.debug(String.valueOf(emp));
}
return emps;
}

- 前端訪問后
http://localhost:8080/ems/emp/queryAll

- 控制臺結果

四、idea中使用日志插件簡化開發
1、下載Log Support2插件

2、重啟idea

3、Settings里面會新增一個Log Support目錄
FrameWork框架選擇slf4j

- 我們為什么要使用slf4j
我們自己的系統中使用了logback這個日志系統
我們的系統使用了A.jar,A.jar中使用的日志系統為log4j
我們的系統又使用了B.jar,B.jar中使用的日志系統為slf4j-simple
這樣,我們的系統就不得不同時支持并維護logback、log4j、slf4j-simple三種日志框架,非常不便,
slf4j只是一個日志標準,并不是日志系統的具體實作 ,理解這句話非常重要,slf4j只做兩件事情:
- 提供日志介面
- 提供獲取具體日志物件的方法
3、如果直接使用Android的日志會沖突

4、測驗
logd+enter(回車)后idea自動幫我們添加private static final Logger log1 = LoggerFactory.getLogger(EmpController.class);
其中d代表debug,i代表info,w代表warn
@Controller
@CrossOrigin
@ResponseBody
public class EmpController {
private static final Logger log= LoggerFactory.getLogger(EmpController.class);
@Autowired
private EmpService empService;
@RequestMapping("/emp/queryAll")
public List<Emp> queryall(){
List<Emp> emps = empService.showEmp();
for (Emp emp : emps) {
log.debug("");
log.info("");
log.warn("");
}
return emps;
}

5、使用占位的方式書寫日志而不用+號拼接
{}代表占位,一個{}代表占位一個

@Controller
@CrossOrigin
@ResponseBody
public class EmpController {
private static final Logger log= LoggerFactory.getLogger(EmpController.class);
@Autowired
private EmpService empService;
@RequestMapping("/emp/queryAll")
public List<Emp> queryall(){
List<Emp> emps = empService.showEmp();
for (Emp emp : emps) {
log.info("員工的資訊 {} {}",emp,"這是占位");
}
return emps;
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/393916.html
標籤:java
