Appender表示日誌輸出到什麼地方,經常使用的輸出地有控制檯,文件,數據庫,遠程服務器等。Log4j中內置了經常使用的輸出地,通常狀況下配置一下便可使用。全部的Appender都實現自org.apache.log4j.Appender藉口。在log4j.properties中,Apender都使用log4j.appender.*配置html
輸出到控制檯mysql
控制檯是最經常使用的輸出地,前面的例子用的就是控制檯輸出(ConsoleAppender)。控制檯輸出實現類爲org.apache.log4j.ConsoleAppender,例如:正則表達式
#跟記錄器,ERROR,輸出到A1 log4j.rootLogger=ERROR, A1 #本記錄器爲DEBUG級別 log4j.category.com.log4j.test=DEBUG #控制檯輸出 log4j.appender.A1=org.apache.log4j.ConsoleAppender #DEBUG以上級別是輸出 log4j.appender.A1.Threshold=DEBUG #編碼方式 log4j.appender.A1.Encoding=UTF-8 #是否當即輸出 log4j.appender.A1.ImmediateFlush=true #使用System.err輸出 log4j.appender.A1.Target=System.err #輸出格式,表達式配置 log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.ConversionPattern=%-d{yyyy-MM-d HH:mm:ss, SSS}[%C]-[%p] %m%n
控制檯輸出須要配置layout屬性,最經常使用的是正則表達式。控制檯輸出的信息通常是TRACE,DEBUG或者INFO級的,只有在開發,調試時才啓用。sql
Threshold用來設置該Appender的級別,只對該Appender生效。全部的Appender均可經過設置Threshold來設置本Appender的啓用級別數據庫
輸出到文件:apache
文件輸出(FileAppender)把日誌輸出到指定的文件。文件輸出的實現類爲org.apache.log4j.FileAppender,配置時須要File指定文件名稱。可使用相對路徑,也可使用絕對路徑例如:服務器
1 log4j.logger.com.log4j.test.Log4jTest=DEBUG, F 2 3 #輸出到文件 4 log4j.appender.F=org.apache.log4j.FileAppender 5 #文件位置 6 log4j.appender.F.File=C:\\log4j.log 7 #追加文件內容 8 log4j.appender.F.Append=true 9 #輸出格式表達式 10 log4j.appender.F.layout=org.apache.log4j.PatternLayout 11 log4j.appender.F.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n
可選參數Append配置是否在原文件內容的基礎上追加日誌。若是爲false,Logger 初始化時會先清掉文件內容,也就是說每次重啓程序,原來的日誌會丟失。若是爲true,日誌文件會愈來愈大。默認爲trueapp
輸出到按大小滾動文件編碼
按大小滾動文件輸出(RollingFileAppender)吧日誌輸出到指定的文件,文件達到指定大小時,會自動改名。按尺寸滾動文件輸出類爲org.apache.log4j.RollingFileAppender,須要配置文件名稱,文件的最大尺寸,例如:spa
1 #DEBUG 級別,兩個輸出:文件與滾動文件 2 log4j.rootLooger=DEBUG, F, Rolling_File 3 4 #輸出到文件 5 log4j.appender.F=org.apache.log4j.FileAppender 6 log4j.appender.F.File=C:\\F.log 7 log4j.appender.F.Appender=true 8 log4j.appender.F.layout=org.apache.log4j.PatternLayout 9 log4j.appender.F.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n 10 11 #輸出到滾動文件 12 log4j.appender.Rolling_File=org.apache.log4j.RollingFileAppender 13 #DEBUG以上才使用 14 log4j.appender.Rolling_File.Threshold=DEBUG 15 #滾動文件名 16 log4j.appender.Rolling_File.File=C:\\rolling.log 17 #追加方式 18 log4j.appender.Rolling_File.Append=true 19 #文件達到10KB就自動命名 20 log4j.appender.Rolling_File.MaxFileSize=10KB 21 #最多備份100個文件 22 log4j.appender.Rolling_File.MaxBackupIndex=100 23 log4j.appender.Rolling_File.layout=org.apache.log4j.PatternLayout 24 log4j.appender.Rolling_File.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n
配置的滾動文件名爲rolling.log,文件最大爲10KB。當rolling.log達到10KB時,會自動改名爲rolling.log1,rolling.log2,rolling.log3………………知道rolling.log100。
Logger支持多個Appender,用逗號講多個Appender名字隔開便可。
輸出到按日期滾動文件
按日期滾動文件輸出(DailyRollingFileAppender)將日誌輸出到指定的文件,當日期發生變化時,會自動按指定的日期格式自動更名。日期滾動文件輸出類爲org.apache.log4j.DailyRollingFileAppender,例如:
1 #DEBUG 級別,兩個輸出:文件與滾動文件 2 log4j.rootLooger=DEBUG, Daily_Rolling 3 4 #輸出到滾動文件 5 log4j.appender.Daily_Rolling=org.apache.log4j.Daily_RollingFileAppender 6 #DEBUG以上才使用 7 log4j.appender.Daily_Rolling.Threshold=DEBUG 8 #滾動文件名 9 log4j.appender.Daily_Rolling.File=C:\\daily_rolling.log 10 #追加方式 11 log4j.appender.Daily_Rolling.Append=true 12 #滾動日期格式 13 log4j.appender.Daily_Rolling.DatePattern=.yyyy-MM-dd 14 # 輸出日期格式 15 log4j.appender.Daily_Rolling.layout=org.apache.log4j.PatternLayout 16 log4j.appender.Daily_Rolling.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n
日誌文件名稱爲daily_rolling.log,日期格式爲 yyyy-MM-dd。進入新的一天後,文件會被自動改名,格式爲daily_rolling.log.2013-06-06。
輸出到JDBC數據庫
數據庫輸出(JDBCAppender),經過JDBC連接把日誌輸出到數據庫中,配置時須要配置JDBC驅動,鏈接字符串,用戶名,密碼以及SQL語句。注意JDBCAppender須要相應的數據庫驅動。先建立數據庫,並創建數據庫日誌表。本例使用MySQL數據庫,腳本以下:
1 create database log4j; 2 use log4j; 3 create table tb_log(id int primary key auto_increment, 4 date varchar(255), 5 priority varchar(255), 6 message text, 7 classname varchar(255));
配置JDBCAppender的代碼以下:log4j.properties
1 #配置rootLogger爲ALL級別,輸出地位DATABASE 2 log4j.rootLogger= ALL, DATABASE 3 #數據庫輸出 4 log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender 5 log4j.appender.DATABASE.Threshold=DEBUG 6 #數據庫鏈接URL 7 log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/log4j 8 #數據庫驅動 9 log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver 10 #用戶名 11 log4j.appender.DATABASE.user=root 12 #用戶密碼 13 log4j.appender.DATABASE.password=password 14 #執行SQL語句,列內容爲表達式 15 log4j.appender.DATABASE.sql=insert into tb_log(date, priority, message, classname) values('%d', '%p', '%m', '%c') 16 #輸出格式 17 log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout 18 log4j.appender.DATABASE.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n
配置的關鍵是SQL語句。Log4j可以取到各類環境數據,包括時間,級別,類名,文件名,方法名,所在行數等。具體詳見後面的格式化器Layout。SQL八個參數對應到日誌表的相關列中。運行代碼以下:
1 import org.apache.log4j.Logger; 2 3 public class Log4jJDBCTest { 4 public static Logger log = Logger.getLogger(Log4jJDBCTest.class); 5 6 public static void main(String[] args) { 7 log.trace("trace信息"); 8 log.debug("debug信息"); 9 log.info("info信息"); 10 log.warn("warn信息"); 11 log.error("errof信息"); 12 log.fatal("fatal信息"); 13 try { 14 String s = null; 15 s.length(); 16 } catch (Exception e) { 17 log.trace("trace一個異常", e); 18 log.debug("debug一個異常", e); 19 log.info("info一個異常", e); 20 log.warn("warn一個異常", e); 21 log.error("error一個異常", e); 22 log.fatal("fatal一個異常", e); 23 } 24 } 25 26 }
運行效果以下:
注意:JDBC輸出可能會由於短期內大量的鏈接數據庫而致使鏈接失敗,所以要謹慎使用JDBC輸出
from: http://www.cnblogs.com/ArtsCrafts/archive/2013/06/07/log4j5.html