log4j
log4j是通過使用Log4j,我們可以控制日志資訊輸送,以及生成解析。等相關操作。
log4j三個重要組成部分
1.Logger(日志記錄器)
控制要啟用或禁用哪些日志記錄語句,并對日志資訊進行級别限制
2.Appenders(輸出端)
指定了日志将輸出列印的位置
3.Layout(日志格式化器)
控制日志資訊的顯示格式
Logger
Logger 負責處理日志記錄的大部分操作。
其文法為:
log4j.rootLogger = [level] , appenderName, appenderName, …
level是日志記錄的優先級;
A:off 最高等級,用于關閉所有日志記錄。
B:fatal 指出每個嚴重的錯誤事件将會導緻應用程式的退出。
C: error 指出雖然發生錯誤事件,但仍然不影響系統的繼續運作。
D: warm 表明會出現潛在的錯誤情形。
E: info 一般和在粗粒度級别上,強調應用程式的運作全程。
F: debug 一般用于細粒度級别上,對調試應用程式非常有幫助。
G: all 最低等級,用于打開所有日志記錄。
Log4j建議隻使用四個級别,優先級從高到低分别是ERROR(error)、WARN(warn)、INFO(info)、DEBUG(debug)。
通過在這裡定義的級别,您可以控制到應用程式中相應級别的日志資訊的開關。
eg:比如在這裡定義了INFO級别,隻有等于及高于這個級别的才進行處理,則應用程式中所有DEBUG級别的日志資訊将不被列印出來。
package log4j;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
public class Log4jTest {
public static void main(String[] args) {
Logger logger = Logger.getLogger(Log4jTest.class);
//使用預設的配置資訊,不需要寫log4j.properties
BasicConfigurator.configure();
//設定日志輸出級别為info,這将覆寫配置檔案中設定的級别
logger.setLevel(Level.INFO);
//下面的消息将被輸出
logger.info("this is an info");
logger.warn("this is a warn");
logger.error("this is an error");
logger.fatal("this is a fatal");
}
}
appenderName就是指定日志資訊輸出到哪個地方。可同時指定多個輸出目的地。
rootLogger(根Logger)是所有Logger的祖先,它有如下屬性:
**1.它總是存在的。
2.它不可以通過名字獲得。**
它可以通過下面兩條代碼獲得rootLogger:
public static Logger Logger.getRootLogger();
//一般常用第二種
public static Logger Logger.getLogger(Class clazz)
Appender
- Appender用來指定日志資訊輸出到哪個地方,可以同時指定多個輸出目的地。
- Log4j允許将資訊輸出到許多不同的輸出裝置中,一個log資訊輸出目的地就叫做一個Appender。
- 每個Logger都可以擁有一個或多個Appender,
- 每個Appender表示一個日志的輸出目的地。
- 可以使用Logger.addAppender(Appender app)為Logger增加一個Appender。
以下為Log4j幾種常用的輸出目的地。
a:org.apache.log4j.ConsoleAppender:将日志資訊輸出到控制台。
b:org.apache.log4j.FileAppender:将日志資訊輸出到一個檔案。
c:org.apache.log4j.DailyRollingFileAppender:将日志資訊輸出到一個日志檔案,并且每天輸出到一個新的日志檔案。
d:org.apache.log4j.RollingFileAppender:将日志資訊輸出到一個日志檔案,并且指定檔案的尺寸,當檔案大小 達到指定尺寸時,會自動把檔案改名,同時産生一個新的檔案。
e:org.apache.log4j.WriteAppender:将日志資訊以流格式發送到任意指定地方。
f:org.apache.log4j.jdbc.JDBCAppender:通過JDBC把日志資訊輸出到資料庫中。
DailyRollingFileAppender
特點是固定周期時間生成一個日志檔案,比如,
預設情況是每天生成一個檔案。這種日志可以友善根據時間來定位日志位置,
使日志清晰易查。但是這種日志有個不好地方是,不能限制日志數量
layout.ConversionPattern
%m(message):輸出的日志消息,如ILog.Debug(…)輸出的一條消息
%n(new line):換行
%d(datetime):輸出目前語句運作的時刻
%r(run time):輸出程式從運作到執行到目前語句時消耗的毫秒數
%t(thread id):目前語句所在的線程ID
%p(priority): 日志的目前優先級别,即DEBUG、INFO、WARN…等
%c(class):目前日志對象的名稱,例如: 模式字元串為:%-10c -%m%n
%-5p的意思是日志級别輸出左對齊,右邊以空格填充,%5p的意思是日志級别輸出右對齊,左邊以空格填充,