Spring boot 中使用log4j2

之前寫了篇正在把日誌轉換成Log4j2 現在才正式把項目的日子都換成log4j2,其中有些凌亂,現在把可用的方法過程寫一下:

 

1、引入log4j2包,把spring-boot-starter-web以及spring-boot-starter兩個包下面的spring-boot-starter-logging排除,然後引入spring-boot-starter-log4j2包

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
			<exclusions>
				<exclusion>
					<!-- 使用了log4j2,就要將spring-boot-starter-logging排除 -->
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<exclusion>
					<!-- 使用了log4j2,就要將spring-boot-starter-logging排除 -->
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
        <!-- 支持log4j2的模塊,注意把spring-boot-starter和spring-boot-starter-web包中的logging去掉 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j2</artifactId>
		</dependency>

 

2、log4j2配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
日誌級別
trace: 是追蹤,就是程序推進以下,你就可以寫個trace輸出,所以trace應該會特別多,不過沒關係,我們可以設置最低日誌級別不讓他輸出。
debug: 調試麼,我一般就只用這個作爲最低級別,trace壓根不用。是在沒辦法就用eclipse或者idea的debug功能就好了麼。
info: 輸出一下你感興趣的或者重要的信息,這個用的最多了。
warn: 有些信息不是錯誤信息,但是也要給程序員的一些提示,類似於eclipse中代碼的驗證不是有error 和warn(不算錯誤但是也請注意,比如以下depressed的方法)。
error: 錯誤信息。用的也比較多。
fatal: 級別比較高了。重大錯誤,這種級別你可以直接停止程序了,是不應該出現的錯誤麼!不用那麼緊張,其實就是一個程度的問題。
 -->
<Configuration status="OFF">
    <!-- 定義日誌存放目錄 -->
    <properties>
        <property name="logPath">logs</property>
        <!-- 輸出日誌的格式 -->
        <!-- 
                %d{yyyy-MM-dd HH:mm:ss, SSS} : 日誌生產時間 
                %p : 日誌輸出格式 
                %c : logger的名稱 
                %m : 日誌內容,即 logger.info("message") 
                %n : 換行符 
                %C : Java類名 
                %L : 日誌輸出所在行數 
                %M : 日誌輸出所在方法名 
                hostName : 本地機器名 
                hostAddress : 本地ip地址 -->
        <property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} %L %M - %msg%xEx%n</property>
    </properties>
    <!--先定義所有的appender(輸出器) -->
    <Appenders>
        <!--輸出到控制檯 -->
        <Console name="ConsoleLog" target="SYSTEM_OUT">
            <!--只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) -->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
            <!--輸出日誌的格式,引用自定義模板 PATTERN -->
            <PatternLayout pattern="${PATTERN}" />
        </Console>
        <!--輸出到文件 -->
        <!--文件會打印出所有信息,這個log每次運行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用 -->
        <!--append爲TRUE表示消息增加到指定文件中,false表示消息覆蓋指定的文件內容,默認值是true -->
        <File name="TestLog" fileName="${logPath}/test.log" append="false">
            <PatternLayout pattern="${PATTERN}" />
        </File>
        <!-- 把error等級記錄到文件 一般不用 -->        
        <File name="FileLog" fileName="${logPath}/error.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="${PATTERN}" />
        </File>
        <!--輸出到循環日誌,每次大小超過size,則這size大小的日誌會自動存入按年份-月份建立的文件夾下面並進行壓縮,作爲存檔 -->
        <RollingFile name="RollingFileLog" fileName="${logPath}/app.log" filePattern="${logPath}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="${PATTERN}" />
            <SizeBasedTriggeringPolicy size="10MB" />
        </RollingFile>
    </Appenders>
    <!--然後定義logger,只有定義了logger並引入的appender,appender纔會生效 -->
    <!--然後定義logger,只有定義了logger並引入的appender,appender纔會生效 -->
    <Loggers>
        <!--建立一個默認的Root的logger,記錄大於level高於warn的信息,如果這裏的level高於Appenders中的,則Appenders中也是以此等級爲起點,比如,這裏level="fatal",則Appenders中只出現fatal信息 -->
        <!-- 生產環境level>=warn -->
        <Root level="debug">
            <!-- 輸出器,可選上面定義的任何項組合,或全選,做到可隨意定製 -->
            <appender-ref ref="ConsoleLog" />
            <appender-ref ref="TestLog" />
            <appender-ref ref="FileLog" />
            <appender-ref ref="RollingFileLog" />
        </Root>
    	<!-- 第三方日誌系統 -->
        <!--過濾掉spring和mybatis的一些無用的DEBUG信息,也可以在spring boot 的logging.level.org.springframework=FATAL設置-->
        <!-- <logger name="org.springframework" level="INFO"></logger> -->
        <!-- <logger name="org.mybatis" level="INFO"></logger> -->
        <!-- <logger name="org.apache.http" level="warn" /> -->
    </Loggers>
</Configuration>

 

3、劃重點:application.properties中配置日誌

#要掃描的包記錄日誌信息
logging.config=classpath:log4j2.xml
# 定義記錄某個包內日誌的級別,高於等於則記錄,可以多個
logging.level.org.springframework=FATAL

 

4、在需要的地方使用

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

...
private static Logger logger = LoggerFactory.getLogger(xx.class);
...
logger.info("------xxxx-------");

 

或者

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

...
private static Logger logger = LogManager.getLogger(XXX.class);
...
logger.debug(XXX);

 

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