spring boot之log日誌

一提起log,相信大部分在開發項目的人都會想到log4j,這個強大的集成日誌;
log4j就是幫助開發人員進行日誌輸出管理的API類庫,可以配置文件靈活的設置日誌信息的優先級、日誌信息的輸出目的地以及日誌信息的輸出格式;
我們先看看之前我們怎麼用這個插件;
一、java工程直接引用(主要是log4j提供的PropertyConfigurator配置類)
我們先建個工程:
最終目錄結構爲:
這裏寫圖片描述

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class Log4jTest {

    static Logger logger = Logger.getLogger(Log4jTest.class);
    public static void get(){

        //注意該方法的參數:  Properties properties
        //                 InputStream file
        //                 String fileName
        //                 URL url
        //這幾種方法都可以引入
        PropertyConfigurator.configure("../log/log4j.properties");

    }

    public static void main(String args[]){
        //靜默配置(無配置文件時可使用)
        /*BasicConfigurator.configure();*/
        get();
        logger.info("aa");
        logger.error("aa");
    }

}

引入log4j的依賴包

  <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.4.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.4.1</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

建一個最簡單的log4j.properties來配置

log4j.rootLogger=INFO,logfile
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.file=../log/log
log4j.appender.logfile.Append=true
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

運行,即可;我們打開log文件夾下的log文件,即可看到正確輸出到文件中。

二、spring項目
在spring框架中我們通過tomcat等服務器進行啓動,不用我們自啓動來引入配置了,這種情況下我們應該怎樣引入log4j呢,這個放心,spring這麼強大,已經集成了各種各樣的插件,當然也包括log4j這個常用的插件。
第一種簡單的就是把log4j.properties放到classpath根目錄下,spring會自動掃描裝載;
第二種是:
在web.xml文件中 配置 加載 log4j.properties的屬性

<!-- 加載log4j的配置文件log4j.properties -->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.properties</param-value>
    </context-param>

    <!-- 設定刷新日誌配置文件的時間間隔,這裏設置爲10s -->
    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>10000</param-value>
    </context-param>

    <!-- 加載Spring框架中的log4j監聽器Log4jConfigListener -->
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

    <!-- 爲避免項目間衝突,定義唯一的 webAppRootKey -->
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>scheduleProject</param-value>
    </context-param>

然後正常使用就可以了;
三、spring boot使用
1.spring boot可以當成一個application,因此可以用第一種方法中的PropertyConfigurator在啓動類中直接把配置引入;
2.利用spring boot自帶的logback(據說是log4j的升級版)
因爲它自己已經集成進去了,所以我們直接使用就好了,依賴包其實加不加都可以

 <dependency>
   <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
   </dependency>

具體的log的配置文件一如既往,我們在application.properties中進行配置

#logging.file=my.log
logging.path=../log
#*爲報名,包底下的class文件都爲這個級別
logging.level.* = DEBUG

默認配置屬性支持

下面介紹幾種在application.properties就可以配置的日誌相關屬性。

控制檯輸出

日誌級別從低到高分爲TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設置爲WARN,則低於WARN的信息都不會輸出。

Spring Boot中默認配置ERROR、WARN和INFO級別的日誌輸出到控制檯。您還可以通過啓動您的應用程序–debug標誌來啓用“調試”模式(開發的時候推薦開啓),以下兩種方式皆可:

在運行命令後加入–debug標誌,如:$ java -jar springTest.jar –debug

在application.properties中配置debug=true,該屬性置爲true的時候,核心Logger(包含嵌入式容器、hibernate、spring)會輸出更多內容,但是你自己應用的日誌並不會輸出爲DEBUG級別。

文件輸出

默認情況下,Spring Boot將日誌輸出到控制檯,不會寫到日誌文件。如果要編寫除控制檯輸出之外的日誌文件,則需在application.properties中設置logging.file或logging.path屬性。

logging.file,設置文件,可以是絕對路徑,也可以是相對路徑。如:logging.file=my.log

logging.path,設置目錄,會在該目錄下創建spring.log文件,並寫入日誌內容,如:logging.path=/var/log

如果只配置 logging.file,會在項目的當前路徑下生成一個 xxx.log 日誌文件。

如果只配置 logging.path,在 /var/log文件夾生成一個日誌文件爲 spring.log

注:二者不能同時使用,如若同時使用,則只有logging.file生效

默認情況下,日誌文件的大小達到10MB時會切分一次,產生新的日誌文件,默認級別爲:ERROR、WARN、INFO

級別控制
所有支持的日誌記錄系統都可以在Spring環境中設置記錄級別(例如在application.properties中)

格式爲:’logging.level.* = LEVEL’

logging.level:日誌級別控制前綴,*爲包名或Logger名

LEVEL:選項TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF

舉例:

logging.level.com.dudu=DEBUG:com.dudu包下所有class以DEBUG級別輸出

logging.level.root=WARN:root日誌以WARN級別輸出

注:1.log.error(“”,e)和log.error(e)的區別
log.error(“”,e)可以打印完整的信息
log.error(e)只會打印關鍵信息
2、maven引入log4j的依賴包一定要注意,因爲好些依賴包都集成了log4j,所以可能會衝突,需要用exclusion來把不需要的依賴包中的log4j給去掉

附:1.log4j.properties參數說明:
http://blog.csdn.net/fgh2009/article/details/7202399
2.log4j可以把日誌直接輸出到kafka中

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