- 新建類文件:
1 import org.apache.log4j.Logger; 2 import org.apache.log4j.PropertyConfigurator; 3 4 /** 5 * 記錄日志到指定文件 6 * 7 * @author He 8 * @date 2018/5/16 9 */ 10 public class Log4jDemo { 11 12 static Logger logger = Logger.getLogger(Log4jDemo.class); 13 14 public static void main(String[] args) { 15 PropertyConfigurator.configure("config/log4j.properties"); 16 logger.info("我記錄在Log4jDemo 文件中...."); 17 logger.error("在Log4jDemo 文件中出現異常...."); 18 } 19 }
2. 在項目根目錄下(即與src平級)創建config文件夾,新建log4j.properties 文件
配置如下:
# 聲明日志類型 log4j.rootLogger = INFO,log4jDemo,test # 配置1 - 即日志Id名為 com.exampl.log.Log4jDemo 的日志配置(通俗來講就是日志的標識,只不過該標識可在多個類中調用) log4j.logger.log4jDemo=com.exampl.log.Log4jDemo log4j.additivity.log4jDemo = false log4j.appender.log4jDemo=org.apache.log4j.RollingFileAppender # 輸出級別(如果定義的ERROR級別,那么打印的INFO級別的日志就不會記錄在文件中,因為INFO的級別比ERROR要) log4j.appender.log4jDemo.Threshold=ERROR # 輸出的日志文件位置及文件名稱 log4j.appender.log4jDemo.File=logs/Log4jDemo.log # 布局類型 log4j.appender.log4jDemo.layout=org.apache.log4j.PatternLayout # 布局模板 log4j.appender.log4jDemo.layout.ConversionPattern=%d %-5p [%l] - %m%n # 輸出的日志文件的最大文件大小,單位b(字節) log4j.appender.log4jDemo.MaxFileSize=5242880 # 日志的循環周期 log4j.appender.log4jDemo.MaxBackupIndex=3
運行main方法 日志輸出如下:
3.關於log4j.properties 一些配置:
- 日志輸出級別,共有5級:
FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7
- Appender 為日志輸出目的地,Log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)
- Layout:日志輸出格式,Log4j提供的layout有以下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)
- 打印參數: Log4J采用類似C語言中的printf函數的打印格式格式化日志信息,如下:
%m 輸出代碼中指定的消息 %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL %r 輸出自應用啟動到輸出該log信息耗費的毫秒數 %c 輸出所屬的類目,通常就是所在類的全名 %t 輸出產生該日志事件的線程名 %n 輸出一個回車換行符,Windows平台為“\r\n”,Unix平台為“\n” %d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},輸出類似:2002年10月18日 22 : 10 : 28 , 921 %l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java: 10 )
- 在代碼中初始化Logger:
1)在程序中調用BasicConfigurator.configure()方法:給根記錄器增加一個ConsoleAppender,輸出格式通過PatternLayout設為"%-4r [%t] %-5p %c %x - %m%n",還有根記錄器的默認級別是Level.DEBUG.
2)配置放在文件里,通過命令行參數傳遞文件名字,通過PropertyConfigurator.configure(args[x])解析並配置;
3)配置放在文件里,通過環境變量傳遞文件名等信息,利用log4j默認的初始化過程解析並配置;
4)配置放在文件里,通過應用服務器配置傳遞文件名等信息,利用一個特殊的servlet來完成配置。
- 日志文件生成周期的定義:
rollover次數 | 輸出的目標 | 壓縮的日志文件 | 描述 |
---|---|---|---|
1 | foo.log |
foo-1.log | 在第一次rollover 時,foo.log會被重命名為foo-1.log。同時會創建一個新的foo.log 並開始寫入。 |
2 | foo.log |
foo-1.log, foo-2.log | 在第二次發生rollover 時,foo-1.log會重命名為foo-2.log並且foo.log會重命名為foo-1.log。同時會創建一個新的foo.log 並開始寫入。 |
3 | foo.log | foo-1.log, foo-2.log, foo-3.log | 在第三次發生rollover 時,foo-2.log會重命名為foo-3.log。foo-1.log重命名為foo-2.log,foo.log會重命名為foo-1.log。同時會創建一個新的foo.log 並開始寫入。 |
4 | foo.log | foo-1.log, foo-2.log, foo-3.log | 在第四次和隨后的rollover 時,foo-3.log會被刪除,foo-2.log重命名為foo-3.log。foo-1.log重命名為foo-2.log。foo.log重命名為foo-1.log。后面同理 |
每次當文件達到指定文件大小(MaxFileSize)時,日志文件就會按上述規則來生成。