Log4j詳細介紹(五)----輸出地Appender


  Appender表示日志輸出到什么地方,常用的輸出地有控制台,文件,數據庫,遠程服務器等。Log4j中內置了常用的輸出地,一般情況下配置一下即可使用。所有的Appender都實現自org.apache.log4j.Appender借口。在log4j.properties中,Apender都使用log4j.appender.*配置

  輸出到控制台

  控制台是最常用的輸出地,前面的例子用的就是控制台輸出(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級的,只有在開發,調試時才啟用。

  Threshold用來設置該Appender的級別,只對該Appender生效。所有的Appender都可通過設置Threshold來設置本Appender的啟用級別

 輸出到文件:

  文件輸出(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,日志文件會越來越大。默認為true

  輸出到按大小滾動文件

  按大小滾動文件輸出(RollingFileAppender)吧日志輸出到指定的文件,文件達到指定大小時,會自動更名。按尺寸滾動文件輸出類為org.apache.log4j.RollingFileAppender,需要配置文件名稱,文件的最大尺寸,例如:

 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輸出

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM