log4J記錄檔

來源:互聯網
上載者:User

Tlog是每一個項目開發中必須的功能,日誌是在程式運行時在其他檔案中記錄的運行資訊。

在應用程式中輸出日誌有三個目的:

1     監視代碼中變數的變化情況,把資料周期性地記錄到檔案中供其他應用進行統計分析工作。

2     跟蹤代碼運行時軌跡,作為日後審計的依據。

3     擔當整合式開發環境中的調試器,向檔案或控制器列印代碼的調試資訊。

使用者可以自由地選擇實現日誌介面的第三方軟體,比如:Log4J、NoOpLog、SimpleLog等都是通用日誌包的實現。

記錄檔作用:是一個記錄器,用於記錄程式運行過程中的各種資訊。
日誌配置:主要設定記錄的層級、存放位置和顯示資訊的布局。可以使用log4j.properties或log4j.xml格式進行配置。

log4j.properties:

載入log4j.properties步驟:

1:將log4j的jar包放到lib目錄下

2:將log4j.properties檔案放到src目錄下

3:在類中匯入類import org.apache.log4j.Logger;

4:在類中定義對象Logger logger = Logger.getLogger(this.getClass());

5:使用logger輸出日誌logger.info(string);

Apache通用日誌包(Log4J,下載地址:http://logging.apache.org/log4j)是Apache的一個開原始碼項目,它提供了一組通用的日誌介面,通用日誌包中的兩個常用介面是LogFactory和Log。

通用日誌包把日誌訊息分為六種層級:

FATAL(致命層級)、ERROR(錯誤層級)、WARN(警告層級)、INFO(一般資訊)、DEBUG(調試資訊)和TRACE(跟蹤資訊)。

其中FATAL層級最高,TRACE層級最低,通用日誌包採用記錄層級機制,可以靈活的控制輸出的日誌內容。

org.apache.commons.logging.Log介面提供如下方法輸出不同層級的日誌。

方法名稱

說明

fatal(Object message)

輸出FATAL層級的日誌訊息

error(Object message)

輸出ERROR層級的日誌訊息

warn(Object message)

輸出WARN層級的日誌訊息

info(Object message)

輸出INFo層級的日誌訊息

debug(Object message)

輸出DEBUG層級的日誌訊息

trace(Object message)

輸出TRACE層級的日誌訊息

Log4j允許我們控制日誌資訊輸送的目的地,可以是控制台、檔案、GUI組件、UNIX Syslog守護進程等;也允許我們控制每一條日誌的輸出格式;通過定義每一條日誌資訊的層級(fatal,error,warn,info,debug),我們能夠更加細緻地控制日誌的產生過程。同時,這些可以通過一個設定檔來靈活地進行配置,而不需要修改應用的代碼。

Log4J設定檔內容主要由三大組件構成:

①  Logger:負責組建記錄檔,並能根據配置的記錄層級來決定什麼日誌訊息應該被輸出,比指定層級高的日誌資訊都能夠輸出,比如指定日子層級為INFO,那麼INFO、WARN、ERROR、FATAL日誌都能夠輸出。

②  Appender:定義日誌訊息輸出的目的地,指定日誌訊息應該被輸出到什麼地方,可以是控制台、檔案或者網路裝置。

③  Layout:指定日誌訊息的輸出格式。

Log4J的設定檔有兩種格式,一種是xml檔案,一種是properties檔案。下面採用properties檔案的形式進行日誌配置。定義設定檔名為log4j.properties,放置在classes目錄下。


1     配置Logger組件

配置Logger組件的文法:

格式:
#log4j.rootLogger=記錄層級,Appender名稱1, Appender名稱2,…
說明:
a、層級分別是:fatal > error > warn > info > debug > trace
b、存放位置列表使用逗號進行分隔,分別是存放變數的說明(在下面配置輸出目的地時需要引用)
注意:
如果層級是info,則大於等於info的才記錄,比info層級低的不記錄(其他層級類似)。

#其中記錄層級可以是前面定義的六種層級中的一種,Appender名稱可以是任何合法的標示符。

#可以是一個,也可以是多個,下面配置的記錄層級是INFO,Appender名稱分別是A1和R:  代碼:log4j.rootLogger=INFO, A1 ,R


2    針對Logger的Appender進行配置,配置日誌訊息輸出目的地Appender,其文法是:

格式:
log4j.appender.存放位置變數 = 存放位置類的完全限定名(一般由log4j組件提供)① 
log4j.appender.存放位置變數.屬性 = 屬性值
說明:
a、log4j提供了幾種與存放位置對應的類
1、org.apache.log4j.ConsoleAppender(控制台)
2、org.apache.log4j.FileAppender(檔案)
3、org.apache.log4j.DailyRollingFileAppender(每天產生一個記錄檔)
4、org.apache.log4j.RollingFileAppender(檔案到達一定尺寸時,則產生一個新的檔案)
5、org.apache.log4j.WriterAppender(日誌流,可以日誌訊息以流格式發送到任何指定的地方)
b、File屬性
可以設定輸出的具體檔案名稱
c、Threshold屬性
可以設定輸出的層級

代碼:  log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.File=c:/log4j.htm  ②

①  Log4J提供的Appender類有以下幾種:如:上a。

②  將日誌輸出到C:/log4j.htm檔案中

3     配置Layout組件 配置Layout組件的文法:

格式:
log4j.appender.存放位置變數.layout = 布局類的完全限定名(一般由log4j組件提供)① 
log4j.appender.存放位置變數.layout.屬性 = 屬性值
說明:
a、log4j提供了幾種與布局對應的類
1、org.apache.log4j.HTMLLayout(以html表格形式布局)
2、org.apache.log4j.PatternLayout(按指定的模式進行布局,通過設定屬性可以靈活的指定配置模式)
3、org.apache.log4j.SimpleLayout(簡單的布局,包含了層級和資訊字串)
4、org.apache.log4j.TTCCLayout(包含時間、線程、類別等資訊的布局)
b、布局中ConversionPattern屬性的參數:

Log4J採用類似C語言中的printf函數的列印格式格式化日誌資訊,列印參數如下:

%m 輸出代碼中指定的訊息

%p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL

%r 輸出自應用啟動到輸出該log資訊耗費的毫秒數

%c 輸出所屬的類目,通常就是所在類的全名

%t 輸出產生該日誌事件的線程名

%n 輸出一個斷行符號分行符號,Windows平台為“rn”,Unix平台為“n”

%d 輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921

%l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。

#例如:

log4j.appender.A1.layout=org.apache.log4j.HTMLLayout log4j.appender.R.layout.ConversionPattern=%-d{HH:mm:ss} [%c]-[%p] %m%n ②

在Tomcat中,內建通用日誌介面包(commons-logging.jar),並且只要在classes目錄下存在log4J.properties檔案就會自動的載入Log4J的配置資訊。通過內建通用日誌包引導Log4J進行日誌輸出。因此不需要配置通用日誌介面,通用日誌介面設定檔應該放在/WEB-INF/classes目錄下,檔案名稱為:commons-logging.properties,配置代碼如下:

配置通用日誌包的文法:#org.apache.commons.logging.Log=實作類別全限定名

例如:

#比如,Log4J的實作類別是: org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog

☆:在程式中使用Log4J可以通過自身的API,也可以使用通用日誌包介面進行訪問。

//通用日誌包使用

//匯入:org.apache.commons.logging.Log

//匯入:org.apache.commons.logging.LogFactory

Log log=LogFactory.getLog(this.getClass());

log.debug("debug........");

log.info("info..........");

 

//Log4J自身API使用

//匯入org.apache.log4j.Logger

Logger logger = Logger.getLogger (this.getClass());

logger.debug("debug........"); logger.info("info..........");常用的配置:
配置1:
#配置根:og4j.rootLogger=DEBUG,A1,R
#配置控制台輸出:
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
#配置每天一個記錄檔:
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=blog_log.txt
log4j.appender.R.MaxFileSize=500KB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
配置2:
log4j.rootLogger=DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE
log4j.addivity.org.apache=true
################### 
# 控制台配置
################### 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
log4j.appender.Threshold=DEBUG 
log4j.appender.CONSOLE.Target=System.out 
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n 
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[日期]%n%p[層級]%n%x[迴圈診斷環境]%n%t[線程] n%c[類]%n%m[訊息]%n%n
##################### 
# 檔案配置
##################### 
log4j.appender.FILE=org.apache.log4j.FileAppender 
log4j.appender.FILE.File=file.log 
log4j.appender.FILE.Append=false 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n 
######################## 
# 每天一個記錄檔的配置 
######################## 
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender 
log4j.appender.ROLLING_FILE.Threshold=ERROR 
log4j.appender.ROLLING_FILE.File=rolling.log 
log4j.appender.ROLLING_FILE.Append=true 
log4j.appender.ROLLING_FILE.MaxFileSize=10KB 
log4j.appender.ROLLING_FILE.MaxBackupIndex=1 
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
######################## 
# 郵件配置 (需要JavaMail和JAF的支援)
####################### 
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender 
log4j.appender.MAIL.Threshold=FATAL 
log4j.appender.MAIL.BufferSize=10 
log4j.appender.MAIL.From=iambenbenchen@163.com
log4j.appender.MAIL.SMTPHost=mail.163.com 
log4j.appender.MAIL.Subject=Log4J 訊息 
log4j.appender.MAIL.To=iambenbenchen@163.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout 
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
######################## 
# 資料庫配置(mysql,注意:每行之後不能有空格,否則報錯)
####################### 
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test 
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver 
log4j.appender.DATABASE.user=root 
log4j.appender.DATABASE.password= root
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n') 
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout 
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
範例程式碼:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;

public class LoginAction{

Log log=LogFactory.getLog(this.getClass());
Logger logger = Logger.getLogger (this.getClass());


public void method(){
log.info(userInfo.getUserInfo().getUserName()+ " log_info開始登陸");
logger.info(userInfo.getUserInfo().getUserName()+ " logger_info開始登陸");
}
}

 public class LoginServlet extends HttpServlet{

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

...

Logger logger=Logger.getLogger(this.getClass());
logger.info(name+"開始登入");

...

logger.info(name+"登入失敗"+e.getMessage());

...

logger.info(name+"登入成功");

...

}

}

log4j.properties檔案:

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

#定義一個名字為file的Appender,它的類型是RollingFileAppender
log4j.appender.file=org.apache.log4j.RollingFileAppender
#設定最大檔案尺寸為1MB,當記錄檔大小達到1MB時,開始備份到備份檔案中
log4j.appender.file.MaxFileSize=1MB
#設定備份檔案的最大數目為1024個檔案,超過1024將自動刪除最舊的檔案
log4j.appender.file.MaxBackupIndex=1024
#指定file Appender輸出的記錄檔的名字和存放路徑。
log4j.appender.file.File=D\:/salog4j.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%-5p] %m%n%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=info, file

#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug

### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug

### log just the SQL
#log4j.logger.org.hibernate.SQL=debug

### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=trace

### log schema export/update ###
#log4j.logger.org.hibernate.tool.hbm2ddl=debug

### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug

### log cache activity ###
#log4j.logger.org.hibernate.cache=debug

### log transaction activity
#log4j.logger.org.hibernate.transaction=debug

### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

 


log4j.xml設定檔設定

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender class="org.apache.log4j.DailyRollingFileAppender" name="rollingFile">
<param name="DatePattern" value=".yyyy-MM-dd"/>
<param name="File" value="c:\log\log.log"/>
<param name="Encoding" value="GBK"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %-5c{3}:%L %X{client} -&gt; %m%n"/>
</layout>
</appender>
<logger name="com.lovebay">
<level value="DEBUG"/>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.