linux類庫之log4j-LogBack-slf4j-commons-logging

log4j

http://commons.apache.org/proper/commons-logging/java

http://logging.apache.org/log4j/2.x/web

 

 

The Common Log Format, also known as the NCSA Common log format,is a standardized text file format used by web servers when generating server log files. Because the format is standardized, the files can be readily analyzed by a variety of web analysis programs, for example Webalizer and Analog.spring

 

Each line in a file stored in the Common Log Format has the following syntax:apache

 

host ident authuser date request status bytesapi

 

127.0.0.1 user-identifier frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326服務器

 

log4j簡介app

Log4j是Apache的一個開放源代碼項目,經過使用Log4j,咱們能夠控制日誌信息輸送的目的地是控制檯、文件、GUI組件,甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等;咱們也能夠控制每一條日誌的輸出格式;經過定義每一條日誌信息的級別,咱們可以更加細緻地控制日誌的生成過程。最使人感興趣的就是,這些能夠經過一個配置文件來靈活地進行配置,而不須要修改應用的代碼。框架

log4j--log for java(java的日誌)
在強調可重用組件開發的今天,除了本身從頭至尾開發一個可重用的日誌操做類外,Apache爲咱們提供了一個強有力的日誌操做包-Log4j。
此外,經過Log4j其餘語言接口,您能夠在C、C++、.Net、PL/SQL程序中使用Log4j,其語法和用法與在Java程序中同樣,使得多語言分佈式系統獲得一個統一一致的日誌組件模塊。並且,經過使用各類第三方擴展,您能夠很方便地將Log4j集成到J2EE、JINI甚至是SNMP應用中。分佈式

使用的license: Apache License V2.0ide

配置log4j四步

第一步  加入log4j-1.2.8.jar(能夠選擇log4j的更高版本)到lib下。

第二步  在CLASSPATH下創建log4j.properties。  參照14的/usr/local/cache-bin下的文件

第三步  修改此文件相關屬性

第四步

在要輸出日誌的類中加入相關語句:
定義屬性:static Logger logger = Logger.getLogger(LogDemo.class); //LogDemo爲相關的類
在相應的方法中:
if (logger.isDebugEnabled()){
logger.debug(「System …..」);
}
 
配文樣例
log4j.rootCategory=INFO, stdout , R
此句爲將等級爲INFO的日誌信息輸出到stdout和R這兩個目的地,stdout和R的定義在下面的代碼,能夠任意起名。等級可分爲OFF、FATAL、ERROR、WARN、INFO、 DEBUG、ALL,若是配置OFF則不打出任何信息,若是配置爲 INFO這樣只顯示INFO, WARN, ERROR的 log信息,而DEBUG信息不會被顯示,具體講解可參照第三部分定義配置文件中的logger。
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
此句爲定義名爲 stdout的輸出端是哪一種類型,能夠是
org.apache.log4j.ConsoleAppender(控制檯),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
具體講解可參照第三部分定義配置文件中的Appender。
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
此句爲定義名爲stdout的輸出端的layout是哪一種類型,能夠是
org.apache.log4j.HTMLLayout(以 HTML表格形式佈局),
org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式),
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息 字符串),
org.apache.log4j.TTCCLayout(包含日誌產生的時間、 線程、類別等等信息)
具體講解可參照第三部分定義配置文件中的Layout。
log4j.appender.stdout.layout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n
若是使用pattern佈局就要指定的打印信息的具體格式ConversionPattern,打印參數以下:
%m 輸出代碼中指定的消息;
%M 輸出打印該條日誌的方法名;
%p 輸出優先級,即DEBUG, INFO,WARN, ERROR,FATAL;
%r 輸出自應用啓動到輸出該log信息耗費的毫秒數;
%c 輸出所屬的類目,一般就是所在類的全名;
%t 輸出產生該日誌事件的線程名;
%n 輸出一個回車換行符,Windows平臺爲"rn」,Unix平臺爲"n」;
%d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyyy-MM-dd HH:mm:ss,SSS},輸出相似:2002-10-18 22:10:28,921;
%l 輸出日誌事件的發生位置,及在代碼中的行數;
[QC]是log信息的開頭,能夠爲任意字符,通常爲項目簡稱。
輸出的信息
[TS] DEBUG [main] AbstractBeanFactory.getBean(189) | Returning cached instance of singleton bean 'MyAutoProxy'
具體講解可參照第三部分定義配置文件中的格式化日誌信息。
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
此句與第3行同樣。定義名爲R的輸出端的類型爲天天產生一個日誌文件。
log4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.log
此句爲定義名爲R的輸出端的文件名爲D:\\Tomcat 5.5\\logs\\qc.log能夠自行修改。
log4j.appender.R.layout=org.apache.log4j.PatternLayout
與第4行相同。
10log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
與第5行相同。
12 log4j.logger.com. neusoft =DEBUG
指定com.neusoft包下的全部類的等級爲DEBUG。
能夠把com.neusoft改成本身項目所用的包名。
13 log4j.logger.com.opensymphony.oscache=ERROR
14 log4j.logger.net.sf.navigator=ERROR
這兩句是把這兩個包下出現的錯誤的等級設爲ERROR,若是項目中沒有配置EHCache,則不須要這兩句。
15 log4j.logger.org.apache.commons=ERROR
16 log4j.logger.org.apache.struts=WARN
這兩句是struts的包。
17 log4j.logger.org.displaytag=ERROR
這句是displaytag的包。(QC問題列表頁面所用)
18 log4j.logger.org.springframework=DEBUG
此句爲Spring的包。
24 log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
25 log4j.logger.org.hibernate=DEBUG
此兩句是hibernate的包。
以上這些包的設置可根據項目的實際狀況而自行定製。
 
log4j的DailyRollingFileAppender只能實現指定時間週期的log文件的備份,當指定週期結束時將如今的log文件加上指定的後綴後,從新開始寫下一個週期的log文件。
 
[root@225-oth cache-bin]# cat j3
log4j.rootLogger                                error,R,stdout
log4j.appender.stdout                           org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout                    org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern  %d{yyyy-MM-dd HH:mm:ss,SSS} %p - %t - %c - %m%n
log4j.appender.R                                org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.datePattern                    '.'yyyy-MM
log4j.appender.R.File                           ${CACHE_SERVER}/logs/cacheserver.log
log4j.appender.R.layout                         org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern       %d{yyyy-MM-dd HH:mm:ss,SSS} %p - %t - %c - %m%n



org.apache.log4j.ConsoleAppender(控制檯),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

此句爲定義名爲stdout的輸出端的layout是哪一種類型,能夠是
org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式),
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)

若是使用pattern佈局就要指定的打印信息的具體格式ConversionPattern,打印參數以下:
%m 輸出代碼中指定的消息;
%M 輸出打印該條日誌的方法名;
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL;
%r 輸出自應用啓動到輸出該log信息耗費的毫秒數;
%c 輸出所屬的類目,一般就是所在類的全名;
%t 輸出產生該日誌事件的線程名;
%n 輸出一個回車換行符,Windows平臺爲"rn」,Unix平臺爲"n」;
%d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyyy-MM-dd HH:mm:ss,SSS},輸出相似:2002-10-18 22:10:28,921;
%l 輸出日誌事件的發生位置,及在代碼中的行數;
 

定義配置文件

Log4j支持兩種配置 文件格式,一種是 XML標準通用標記語言下的一個應用)格式的文件,一種是Java特性文件log4j.properties(鍵=值)。下面將介紹使用log4j.properties文件做爲配置文件的方法:
配置根Logger
配置日誌信息輸出目的地 Appender
配置日誌信息的格式(佈局)Layout
 

應用

到目前爲止,這篇文章講的都是如何在application中應用log4j,而Java如今的應用主流是J2EE和J2ME。如今,咱們來看一下要如何在 J2EE開發中應用log4j。其實在Web application中應用log4j也很簡單,與在application中應用log4j不一樣之處就是要在全部應用log4j的代碼以前對log4j進行初始化。因此,咱們在web application中就要把log4j的初始化工做獨立出來,把它放在Servlet中。下面,咱們看一個例子。
 

slf4j與log4j是什麼關係?
都是用於作日誌(log)的兩套接口,slf4j.jar和log4j, 他們都符合common log的標準而制定的。能夠說是競爭關係,相對而言,log4j用的相對比較多。 Hibernate裏記錄日誌用的是slf4j,不過能夠更改api替換爲log4j,這麼作的人也不少。
slf是hibernate提供的一個日誌接口,它能夠被log4j的方法去實現,也能夠被common-logging的方法去實現,等等!只是一個接口與方法實現的關係!

java日誌組件介紹(common-logging,log4j,slf4j,logback )

Log4j與common-logging聯繫與區別

commons-logging 和 log4j 之間的關係

咱們在作項目時,日誌的記錄是必不可少的一項任務,而咱們一般是使用 apache 的 log4j 日誌管理工具。然而,在項目中,咱們常常會看到兩個 jar 包:commons-logging.jar 和 log4j.rar。爲何咱們在使用 log4j 的同時還要引入 commons-logging.jar 呢,或者說不用 commons-logging.jar 可不能夠,這二者之間究竟是怎麼的一種關係呢?

        做爲記錄日誌的工具,它至少應該包含以下幾個組成部分(組件):
        1. Logger
             記錄器組件負責產生日誌,並可以對日誌信息進行分類篩選,控制什麼樣的日誌應該被輸出,什麼樣的日誌應該被忽略。它還有一個重要的屬性 - 日誌級別。無論何種日誌記錄工具,大概包含了以下幾種日誌級別:DEBUG, INFO, WARN, ERROR 和 FATAL。
        2. Level
            日誌級別組件。
        3. Appender
            日誌記錄工具基本上經過 Appender 組件來輸出到目的地的,一個 Appender 實例就表示了一個輸出的目的地。
        4. Layout
            Layout 組件負責格式化輸出的日誌信息,一個 Appender 只能有一個 Layout。

咱們再來看看 log4j.jar,打開 jar 包,咱們能夠看到 Logger.class(Logger),Level.class(Level), FileAppender.class(Appender), HTMLLayout.class(Layout)。其它的咱們先忽略不看,這幾個字節碼文件正好是記錄日誌必不可少的幾個組件。
接下來看看 commons-logging 中的 org.apache.commons.logging.Log.java 源碼:

好了,分析到這裏,咱們應該知道,真正的記錄日誌的工具是 log4j 和 sun 公司提供的日誌工具。而 commons-logging 把這兩個(實際上,在 org.apache.commons.logging.impl 包下,commons-logging 僅僅爲咱們封裝了 log4j 和 sun logger)記錄日誌的工具從新封裝了一遍(Log4JLogger.java 和 Jdk14Logger.java),能夠認爲 org.apache.commons.logging.Log 是個傀儡,它只是提供了對外的統一接口。所以咱們只要能拿到 org.apache.commons.logging.Log,而不用關注到底使用的是 log4j 仍是 sun logger。

既然如此,咱們向構建路徑加了 commons-logging.jar 和 log4j.jar 兩個 jar 包,那咱們的應用程序到底使用的 log4j 仍是 sun logger 呢?

但是問題又來了,org.apache.commons.logging.Log 和 org.apache.log4j.Logger 這兩個類,經過包名咱們能夠發現它們都是 apache 的項目,既然以下,爲什麼要動如此大的動做搞兩個東西(指的是 commons-logging 和 log4j)出來呢?事實上,在 sun 開發 logger 前,apache 項目已經開發了功能強大的 log4j 日誌工具,並向 sun 推薦將其歸入到 jdk 的一部分,但是 sun 拒絕了 apache 的提議,sun 後來本身開發了一套記錄日誌的工具。但是如今的開源項目都使用的是 log4j,log4j 已經成了事實上的標準,但因爲又有一部分開發者在使用 sun logger,所以 apache 才推出 commons-logging,使得咱們沒必要關注咱們正在使用何種日誌工具。

 

slf4j全 稱爲Simple Logging Facade for JAVA,java簡單日誌門面。相似於Apache Common-Logging,是對不一樣日誌框架提供的一個門面封裝,能夠在部署的時候不修改任何配置便可接入一種日誌實現方案。可是,他在編譯時靜態綁 定真正的Log庫。使用SLF4J時,若是你須要使用某一種日誌實現,那麼你必須選擇正確的SLF4J的jar包的集合(各類橋接包)。

 

common-logging是apache提供的一個通用的日誌接口。用戶能夠自由選擇第三方的日誌組件做爲具體實現,像log4j,或者jdk自帶的logging, common-logging會經過動態查找的機制,在程序運行時自動找出真正使用的日誌庫。固然,common-logging內部有一個Simple logger的簡單實現,可是功能很弱。因此使用common-logging,一般都是配合着log4j來使用。使用它的好處就是,代碼依賴是common-logging而非log4j, 避免了和具體的日誌方案直接耦合,在有必要時,能夠更改日誌實現的第三方庫。

相關文章
相關標籤/搜索