log4j的完整配置方法

來源:互聯網
上載者:User

    在強調可重用組件開發的今天,除了自己從頭到尾開發一個可重用的日誌操作類外,Apache為我們提供了一個強有力的日誌操作包-Log4j。

Log4j是Apache的一個開放原始碼項目,通過使用Log4j,我們可以控制日誌資訊輸送的目的地是控制台、檔案、GUI組件、甚至是套介面伺服器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日誌的輸出格式;通過定義每一條日誌資訊的層級,我們能夠更加細緻地控制日誌的產生過程。最令人感興趣的就是,這些可以通過一個設定檔來靈活地進行配置,而不需要修改應用的代碼。

此外,通過Log4j其他語言介面,您可以在C、C++、.Net、PL/SQL程式中使用Log4j,其文法和用法與在Java程式中一樣,使得多語言分布式系統得到一個統一一致的日誌組件模組。而且,通過使用各種第三方擴充,您可以很方便地將Log4j整合到J2EE、JINI甚至是SNMP應用中。本文介紹的Log4j版本是1.2.8,怎樣通過一個設定檔來靈活地進行配置,主要的應用平台是Tomcat4.

1.3。Log4j的配置。

首先到jakarta下載一個log4j的組件。把jakarta-log4j-1.2.8/dist/lib下的log4j-1.2.8.jar檔案copy到classpath指定的目錄下!可以是Tomcat的common/lib目錄下,也可以是你需要用到log4j的application下的lib目錄。

1.4在Application目錄下的web.xml檔案加入以後代碼

<servlet>
<servlet-name>log4j </servlet-name>
<servlet-class>com.apache.jakarta.log4j.Log4jInit </servlet-class>
<init-param>
<param-name>log4j </param-name>
<param-value>/WEB-INF/log4j.properties </param-value>
</init-param>
<load-on-startup>1 </load-on-startup>
</servlet>

這段代碼的意思是說,在Tomcat啟動時載入com.apache.jakarta.log4j.Log4jInit這個名叫Log4jInit.class這個類檔案。其中Log4jInit.class的原始碼如下

package com.apache.jakarta.log4j;
import org.apache.log4j.PropertyConfigurator;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Log4jInit extends HttpServlet {
public void init() {
String prefix = getServletContext().getRealPath("/";
String file = getInitParameter("log4j";
// if the log4j-init-file is not set, then no point in trying
System.out.println("................log4j start";
if(file != null) {
PropertyConfigurator.configure(prefix+file);
}
}
public void doGet(HttpServletRequest req, HttpServletResponse res) {
}
}
這段代碼很簡單,可以看出,在載入的過程中,程式會讀取/WEB-INF/log4j.properties這個檔案
這個檔案就是本文的重點,也就是log4j的設定檔。

# Set root logger level to DEBUG and its only appender to A1
#log4j中有五級logger
#FATAL 0
#ERROR 3
#WARN 4
#INFO 6
#DEBUG 7
#配置根Logger,其文法為:
#log4j.rootLogger = [ level ] , appenderName, appenderName, …
log4j.rootLogger=INFO, A1 ,R
#這一句設定以為著所有的log都輸出
#如果為log4j.rootLogger=WARN, 則意味著只有WARN,ERROR,FATAL
#被輸出,DEBUG,INFO將被屏蔽掉.
# A1 is set to be a ConsoleAppender.
#log4j中Appender有幾層如控制台、檔案、GUI組件、甚至是套介面伺服器、NT的事件記錄器、UNIX Syslog守護進程等
#ConsoleAppender輸出到控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 使用的輸出布局,其中log4j提供4種布局. org.apache.log4j.HTMLLayout(以HTML表格形式布局)
#org.apche.log4j.PatternLayout(可以靈活地指定配置模式),
#org.apache.log4j.SimpleLayout(包含日誌資訊的層級和資訊字串),
#org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等資訊)
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
#靈活定義輸出格式 具體查看log4j javadoc org.apache.log4j.PatternLayout
#d 時間 ....
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
#R 輸出到檔案 RollingFileAppender的擴充,可以提供一種日誌的備份功能。
log4j.appender.R=org.apache.log4j.RollingFileAppender
#記錄檔的名稱
log4j.appender.R.File=log4j.log
#記錄檔的大小
log4j.appender.R.MaxFileSize=100KB
# 儲存一個備份檔案
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.TTCCLayout
#log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
配置以這裡就差不多了,如果你想更深入瞭解設定檔的各個細節,可以去查看docs。還有,在文章的最後面我們提供設定檔中一些主要的文法。下面我們來看看怎樣在程式中使用log4j.
1.4 Log4j的使用。
使用Log4j,第一步就是擷取日誌記錄器,這個記錄器將負責控制日誌資訊。其文法為:
public static Logger getLogger( String name),
必須在使用前要把這個類匯入
import org.apache.log4j.Logger;
name一般是類檔案的名字,如下:
static Logger logger = Logger.getLogger ("".class.getName () ) ;
您就可以輕鬆地使用不同優先順序別的日誌記錄語句插入到您想記錄日誌的任何地方,其文法如下:
logger.debug ( Object message ) ;
logger.info ( Object message ) ;
logger.warn ( Object message) ;
logger.error ( Object message ) ;
為什麼這裡要分層級的呢?試想一下,我們在寫程式的時候,為了偵錯工具,會在很多會出錯的地方加入大量的logger.info();資訊。當然程式調試完畢,我們不需要這些輸出資訊了,那怎麼辦呢?以前的做法是把每個程式中的logger.info刪除,但這是不現實的,如果程式不大還可以,但如果程式很多,做這些事情就很煩人了。但因為log4j分層級了,當我們不需要輸出這樣調試時用到的log.info()時,我們可以把輸出的層級調高,如調到warn,或error層級,這樣info層級及以下的層級就不會出輸出了,是不是很方便的呢?
其實除了這種使用方式,log4j還有其它的使用方面,不需要設定檔,直接在程式中定義輸入出層級,層次等資訊,如果要瞭解這方法的使用,可以參考文檔。
1.5。附註:
以下是設定檔的一些重要的文法
定義設定檔
其實您也可以完全不使用設定檔,而是在代碼中配置Log4j環境。但是,使用設定檔將使您的應用程式更加靈活。
Log4j支援兩種設定檔格式,一種是XML格式的檔案,一種是Java特性檔案(鍵=值)。下面我們介紹使用Java特性檔案做為設定檔的方法:
配置根Logger,其文法為:
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(包含日誌產生的時間、線程、類別等等資訊)

 

轉自互連網

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.