圖文詳解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隻做兩件事情:

  • 提供日志接口
  • 提供獲取具體日志對象的方法

4、如果直接使用Android的日志會沖突

5、測試

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;
    }

6、使用占位的方式書寫日志而不用+號拼接

{}代表占位,一個{}代表占位一個

@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;
    }

總結

到此這篇關於SpringBoot中Log日志集成的文章就介紹到這瞭,更多相關SpringBoot中Log日志集成內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: