log4j由三部分組成:java
1、日誌信息的優先級、日誌信息的輸出目的地、日誌信息的輸出格式;apache
日誌的優先級:bash
一、Error:指出雖然發生錯誤事件,但仍然不影響系統的繼續運行app
二、Warn:代表會出現潛在的錯誤情形。函數
三、Info:通常和在粗粒度級別上,強調應用程序的運行全程。佈局
四、DeBug:通常用於細粒度級別上,對調試應用程序很是有幫助。spa
日誌的輸出目的地:日誌打印到控制檯或者文件線程
日誌信息的輸出格式:控制日誌信息的顯示內容debug
2、定義配置文件調試
支持兩種配置文件格式:xml格式的文件,Java特性的文件(鍵=值)
properties格式的文件配置詳解:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
一、其中,level 是日誌記錄的優先級,分爲OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優先級從高到低分別是ERROR、WARN、INFO、DEBUG。經過在這裏定義的級別,您能夠控制到應用程序中相應級別的日誌信息的開關。好比在這裏定義了INFO級別,則應用程序中全部DEBUG級別的日誌信息將不被打印出來。
appenderName就是指定日誌信息輸出到哪一個地方。您能夠同時指定多個輸出目的地。
二、配置日誌信息輸出目的地Appender,其語法爲:
log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 … log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有如下幾種:
org.apache.log4j.ConsoleAppender(控制檯),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
三、配置日誌信息的格式(佈局),其語法爲:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 … log4j.appender.appenderName.layout.option = valueN
其中,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平臺爲「rn」,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)
3、在代碼中使用Log4j
一、獲得記錄器:
static Logger logger = Logger.getLogger ( 類.class ) ;
二、讀取配置文件
當得到了日誌記錄器以後,第二步將配置Log4j環境,其語法爲:
BasicConfigurator.configure (): 自動快速地使用缺省Log4j環境。
PropertyConfigurator.configure ( String configFilename) :讀取使用Java的特性文件編寫的配置文件。
DOMConfigurator.configure ( String filename ) :讀取XML形式的配置文件。
三、插入記錄信息
當上兩個必要步驟執行完畢,您就能夠輕鬆地使用不一樣優先級別的日誌記錄語句插入到您想記錄日誌的任何地方,其語法以下:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;
public class Logger { public static String OutputFileName = getDateTimeByFormat(new Date(), "yyyyMMdd_HHmmss"); private static OutputStreamWriter outputStreamWriter; private static String logFileName; public static boolean LogFlag = true; public Logger() { } private static void WriteLog(String logEntry) { try { // ����log�ļ����ƺ�·�� logFileName = ".\\Log" + "\\" + OutputFileName + ".log"; if (outputStreamWriter == null) { File logFile = new File(logFileName); if (!logFile.exists()) logFile.createNewFile(); //����OutputStreamWriter����־�ļ�д���� outputStreamWriter = new OutputStreamWriter(new FileOutputStream(logFileName), "utf-8"); } outputStreamWriter.write(logEntry, 0, logEntry.length()); outputStreamWriter.flush(); } catch (Exception e) { System.out.println(LogType.LogTypeName.ERROR.toString() + ": Failed to write the file " + logFileName); e.printStackTrace(); } } //��ȡ��ǰϵͳʱ�䣬����ʽ�����ʱ�� private static String getDateTimeByFormat(Date date, String format) { SimpleDateFormat df = new SimpleDateFormat(format); return df.format(date); } public static void Output(LogType.LogTypeName logTypeName, String logMessage) { Date date = new Date(); String logTime = getDateTimeByFormat(date, "yyyy-MM-dd HH:mm:ss.SSS"); String logEntry = logTime + " " + logTypeName.name() + ": " + logMessage + "\r\n"; System.out.print(logEntry); // ͨ�����ؿ�����־�����һ����������true if (LogFlag) WriteLog(logEntry); } }