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下的文件
第三步 修改此文件相關屬性
第四步
[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 輸出日誌事件的發生位置,及在代碼中的行數;
定義配置文件
應用
slf4j與log4j是什麼關係?
都是用於作日誌(log)的兩套接口,slf4j.jar和log4j, 他們都符合common log的標準而制定的。能夠說是競爭關係,相對而言,log4j用的相對比較多。 Hibernate裏記錄日誌用的是slf4j,不過能夠更改api替換爲log4j,這麼作的人也不少。
slf是hibernate提供的一個日誌接口,它能夠被log4j的方法去實現,也能夠被common-logging的方法去實現,等等!只是一個接口與方法實現的關係!
java日誌組件介紹(common-logging,log4j,slf4j,logback )
咱們在作項目時,日誌的記錄是必不可少的一項任務,而咱們一般是使用 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, 避免了和具體的日誌方案直接耦合,在有必要時,能夠更改日誌實現的第三方庫。