log4j組件的用法(log4j1)

來源:互聯網
上載者:User

標籤:

在實際的項目開發和維護中,日誌是經常用到的一個內容。遇到問題的時候,經常需要通過日誌去查出問題的所在並解決問題。

通常我們會用:

System.out.println(xxx);

來列印運行中所需要的內容。但在日誌非常多的情況下,或者在項目上線的情況下,這種方式就狠不實用了。總不能盯著控制台看日誌吧?如果想看前段時間的日誌呢?如果要大批的改變日誌列印出的內容呢?如果想只看異常資訊的日誌呢?所以,要使用日誌組件。

Java中的日誌組件有很多,如:Apache的log4j、commons-logging.jar,slf4j(slf4j做的是封裝簡化的工作,是把底層jdk中的日誌等內容封裝了)。jdk中也有日誌,java.util.logging.Logger。目前在工作中接觸的也就是log4j了。

log4j是apache下的一個開源項目。官網: http://logging.apache.org/, 其中有Apache下各個程式設計語言的日誌組件。log4j現在有2和1,現在用1版本的(2版本目前還是beta版),下載log4j,其中包含log4j的jar包。版本下載1最新的log4j-1.2.17.jar。下載後,解壓,把log4j的jar包放入項目的lib下,就可以開始使用了。

一、

(1)在程式中寫日誌,如下:

 1 import org.apache.log4j.Logger; 2  3 public class LoggerTest { 4     private Logger log = Logger.getLogger(LoggerTest.class);//建立Logger對象,建構函式的參數寫該類的class,表明是該類中的日誌,日誌中列印的資訊中,類名也是這個 5      6     public void add() { 7         //1. 寫日誌 8         log.debug("LoggerTest debug message"); 9         log.info("LoggerTest info message");10         log.warn("LoggerTest warn message");11         log.error("LoggerTest error message");12         log.fatal("LoggerTest fatal message");13         //log輸出的規則: debug < info < warn < error < fatal14     }15 }

log4j中的日誌分五個層級,分別是debug、info、warn、error、fatal,它們的層級高低是:debug < info < warn < error < fatal。在設定檔中可以設定日誌的輸出層級,只有該層級的和高於該層級的日誌才可以被看到。比如,在設定檔中設定的輸出層級是warn,那麼只有輸出層級為warn、error、fatal的日誌才會輸出,debug和info的日誌不會被輸出。
該例子中,當執行到log.xxx(xxx);方法的時候,日誌就會按照設定檔中的設定輸出。接下來看如何寫設定檔。

(2)寫設定檔

在源檔案包中建一個名為log4j.properties的檔案(檔案名稱固定)。

下載的log4j包中,example檔案夾裡是一些例子,可以參考其中的sort1.properties,sort2.properties...來寫設定檔。

官網上的Java Doc是log4j的API,供查詢參考。

①先看一個基本的寫法: 

1 log4j.appender.A1=org.apache.log4j.ConsoleAppender 2 log4j.appender.A1.layout=org.apache.log4j.PatternLayout3 log4j.appender.A1.layout.ConversionPattern=(%d)[%m]--%l%n4 5 log4j.rootLogger=DEBUG,A1

第一行:表示日誌的輸出方式。A1是我們自己起的名字。值是ConsoleAppender類的完全限定名。ConsoleAppender表示在控制台上輸出。

第二行:日誌的輸出形式

第三行:輸出的格式,其中的括弧、中括弧、橫線,都是一般字元,為了顯示的好看而已,沒有其他含義。各個"%"+字母的含義如下:

1 %m 輸出代碼中指定的訊息2 %p 輸出優先順序, 即DEBUG, INFO, WARN, ERROR, FATAL3 %r 輸出自應用啟動到輸出該log資訊耗費的毫秒數4 %c 輸出所屬的類目, 通常就是所在類的全名5 %t 輸出產生該日誌事件的線程名6 %n 輸出一個斷行符號分行符號, Windows平台為“/r/n” , Unix平台為“/n”7 %d 輸出日誌時間點的日期或時間, 預設格式為ISO8601, 也可以在其後指定格式, 比如: %d{yyy MMM dd8 HH:mm:ss , SSS}9 %l 輸出日誌事件的發生位置, 包括類目名、 發生的線程, 以及在代碼中的行數。
View Code

第五行:rootLogger表示,src程式碼封裝下的所有包的記錄層級,和使用的配置的名字。

%m是log.debug等裡面寫的內容

②當項目部署到伺服器上後,通常把日誌存在檔案中,便於尋找問題時使用,寫法如下:

1 log4j.appender.fout=org.apache.log4j.FileAppender2 log4j.appender.fout.layout=org.apache.log4j.PatternLayout3 log4j.appender.fout.layout.ConversionPattern=[%p](%d)---%l--%m\r\n4 log4j.appender.fout.file=C:/logs/system.log
5 log4j.rootLogger=DEBUG, fout

第一行:使用FileAppender

第四行:寫上存放日誌的路徑

③上一種方法日積月累之後,記錄檔會變的非常大,可能上G。查看這麼大的log文本,實在是不方便。通常會按照日期存放日誌。

1 log4j.appender.fout=org.apache.log4j.DailyRollingFileAppender2 log4j.appender.fout.layout=org.apache.log4j.PatternLayout3 log4j.appender.fout.layout.ConversionPattern=[%p](%d)---%l--%m\r\n4 log4j.appender.fout.DatePattern=‘.‘ yyyy-MM-dd
5 log4j.appender.fout.Threshold=INFO
6 log4j.appender.fout.file=C:/logs/x.log

第一行:使用DailyRollingFileAppender

第四行:表示按照日來存放日誌,到了第二天,第一天的日誌名稱就自動由"x.log"變成"x年-月-日.log"

第五行:表示存到檔案中的日誌的層級。如果同時寫的有:log4j.rootLogger=DEBUG, fout層級以第五行的為準

該部分可以寫多個,然後設定不同的log層級,這樣不同層級的log就存放在不同的檔案裡了。

④日誌也可以根據源檔案的包來存放

1 log4j.appender.fout=org.apache.log4j.DailyRollingFileAppender2 log4j.appender.fout.layout=org.apache.log4j.PatternLayout3 log4j.appender.fout.layout.ConversionPattern=[%p](%d)---%l--%m\r\n4 log4j.appender.fout.DatePattern=‘.‘ yyyy-MM-dd5 log4j.appender.fout.file=C:/logs/x.log6 7 log4j.logger.com.google=ERROR, fout 

第七行:log4j.logger後面加上包名,表名這個包裡的日誌的輸出設定是fout,層級是error 

 

log4j組件的用法(log4j1)

聯繫我們

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