1. 程式人生 > >log4j的使用及其原理

log4j的使用及其原理

log4j的簡單使用方法

我的專案是mvn,ssm環境,需要debug環境下mybatis執行sql時列印對應sql和引數

1mvn引入相關包,在pom.xml中加入如下配置:

		<dependency>
		    <groupId>log4j</groupId>
		    <artifactId>log4j</artifactId>
		    <version>1.2.17</version>
		</dependency>

2log4j.properties檔案所在位置和內容

位置如下:

內容如下:

log4j.rootLogger=INFO,stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%p] %d{yyyy-MM-dd HH:mm:ss} %l: %m%n

#此處com包,會包含com及其子目錄下的所有名稱空間
#log4j.logger.com=debug

#推薦寫法如下,對應與mapper.xml中的namespace對應的名稱空間:<mapper namespace="com.ruisitech.bi.mapper.bireport.RhJobMapper">
log4j.logger.com.ruisitech.bi.mapper.bireport=debug

log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
#log4j.logger.com.bonc.ext.engine = DEBUG, a2

#log4j.appender.a2=org.apache.log4j.FileAppender
#log4j.appender.a2.layout=org.apache.log4j.PatternLayout
#log4j.appender.a2.layout.ConversionPattern=[%p] %d{yyyy-MM-dd HH:mm:ss} %l: %m%n
#log4j.appender.a2.File=E\:example.log
#log4j.appender.a2.MaxFileSize= 100KB

有一點特別說明下:

log4j.logger.com.ruisitech.bi.mapper.bireport=debug中的om.ruisitech.bi.mapper.bireport是mapper.xml中的名稱空間 ,如:

<mapper namespace="com.ruisitech.bi.mapper.bireport.RhJobMapper">

com.ruisitech.bi.mapper.bireport 需要修改成你自己的名稱空間,否則不會生效!!!!!
 

3在debug模式下啟動web專案,會發現執行的時候會答應對應的sql了,效果如下圖:

4在java檔案中使用

import org.apache.log4j.Logger;

/**
 * @author:mazhen
 * @date:2018/10/31 11:31:
 * @description:
 */
public class LoggerTest {

    static Logger logger = Logger.getLogger ( LoggerTest.class ) ;

    public static void main(String[] args) {
        
        logger.debug("Debug ...");

        logger.info("Info ...");

        logger.warn("Warn ...");

        logger.error("Error ...");

    }

}

log4j.properties為什麼無需在web.xml等配置檔案中引入?

其他地方並沒有配置讀取log4j配置檔案,但程式執行後log4j配置檔案會自動起作用。下圖展示的是apache.log4j.java

可以看出在Logger中通過LogManager獲取Logger物件,LogManager.java程式碼如下:

上圖紅色框中顯示LogManager的靜態程式碼塊中會先查詢程式中有沒有override相關功能,如果沒有就查詢log4j.xml,如果還沒有就查詢log4j.properties檔案,即當我們引用了org.apache.log4j,配置好log4j.xml或者log4j.properties後,可以不用在配置檔案中或者程式中再顯示地讀取log4j的配置檔案,在jvm載入LogManager.class時候會執行靜態程式碼塊中的查詢程式碼。

圖2中Loader.getResource()程式碼如下:

log4j別的使用方法