Log4j簡介
Log4j是Apache的一個開放源代碼項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制台、文件、GUI組件、甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。最令人感興趣的就是,這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。
以Java項目為例介紹log4j配置步驟
工程結構如下:

1.添加log4j相關jar包(maven)
<!--添加log4j相關jar包--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency>
2.log4j.properties配置
#日志配置 log4j.rootLogger = DEBUG,stdout,file #控制台輸出 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.Threshold=DEBUG log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n #所有文件輸出 log4j.appender.file = org.apache.log4j.FileAppender log4j.appender.file.File = D:/logs/log.log log4j.appender.file.Encoding=UTF-8 log4j.appender.file.name = fileLogDemo log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c {Num}] [%l] [ %t:%r ] - [ %p ] %m%n log4j.appender.file.append = true
3.測試類
import org.apache.log4j.Logger;
public class log4jTest { //獲取日志記錄器Logger,名字為本類類名 private static Logger logger = Logger.getLogger(log4jTest.class); public static void main(String[] args) { for(int i=0;i<3;i++){ // 記錄debug級別的信息 logger.debug("log4j日志輸出:This is debug message."); // 記錄info級別的信息 logger.info("log4j日志輸出:This is info message."); // 記錄error級別的信息 logger.error("log4j日志輸出:This is error message."); } } }
控制台輸出結果
日志文件輸出結果

log4j配置說明
log4j包含三個組件,分別是 Logger(記錄器)、Appender(輸出目的地)、Layout(日志布局)。可分別簡單理解為"日志類別"、"日志要輸出的地方"和"日志以何種形式輸出"。
1、配置Logger記錄器
log4j.rootLogger = [ level ] , appenderName, appenderName, …
level表示日志記錄的優先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者你定義的級別。
Log4j建議使用四個級別,優先級從高到低分別是ERROR、WARN、INFO、DEBUG。
通過在這里定義的級別,你可以控制到應用程序中相應級別的日志信息的開關。比如在這里定義了INFO級別,則應用程序中所有DEBUG級別的日志信息將不被打印出來。
appenderName就是指日志輸出的目的。你可以靈活地定義日志輸出,也可以同時指定多個輸出目的地。
Log4j配置文件實現了輸出到控制台、文件、回滾文件、發送日志郵件、輸出到數據庫日志表、自定義標簽等全套功能。
2、配置Appender輸出目的地
輸出目的地類型:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)
3、配置layout日志布局
org.apache.log4j.HTMLLayout(HTML表格形式) org.apache.log4j.SimpleLayout(簡單格式的日志,只包括日志信息的級別和指定的信息字符串 ,如:DEBUG - Hello) org.apache.log4j.TTCCLayout(日志的格式包括日志產生的時間、線程、類別等等信息) org.apache.log4j.PatternLayout(靈活地自定義日志格式)
使用org.apache.log4j.PatternLayout來自定義信息格式時,可以使用ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c {Num}] [%l] [ %t:%r ] - [ %p ] %m%n 來格式化信息
%c 輸出所屬類的全名,可寫為 %c{Num} ,Num類名輸出的范圍 如:"com.sun.aaa.classB",%C{2}將使日志輸出輸出范圍為:aaa.classB %d 輸出日志時間其格式為 可指定格式 如 %d{HH:mm:ss}等 %l 輸出日志事件發生位置,包括類目名、發生線程,在代碼中的行數 %n 換行符 %m 輸出代碼指定信息,如info(“message”),輸出message %p 輸出日志的優先級,即 FATAL ,ERROR 等 %r 輸出從啟動到顯示該條日志信息所耗費的時間(毫秒數) %t 輸出產生該日志事件的線程名