Log4j與common-logging
3
總網上搜了些Log4j與common-logging的介紹,記錄下。
一.Log4j
1.簡介
Log4j是Apache的一個開放源代碼項目
使用Log4j,我們可以很方便的來記錄日志.
從http://www.apache.org/dist/logging/log4j/1.2.14/下載最新的穩定版本
2.用法
把log4j-1.2.14.jar丟到lib目錄下,使用log4j前需要定義配置文件,也可以不使用,而是在代碼中配置log4j環境.但是使用配置文件使應用程序更加靈活。
log4j配置文件有三個主要的組件:Logger,Appender和Layout,分別為日志類型,日志輸出目的地,日志輸出格式.
跟proxool類似,log4j支持兩種類型的配置文件,xml和properties
log4j.properties配置文件如下:(需要把log4j的配置文件放在classpath下)
log4j.rootLogger = [level], appenderName, appenderName, ... (level是錯誤級別,appenderName是輸出目的地,可以定義多個)
level優先級分別為FATAL、ERROR、WARN、INFO、DEBUG 5個級別.通過定義的級別,你可以控制程序中的日志輸出.比如在這里定義了ERROR級別,程序中只有FARAL、ERROR 級別的LOG會被輸出.
log4j.appender.appenderName = 輸出目的地(這里的appenderName是在前面定義的,可任意起名)
Log4j提供的輸出目的地有以下幾種:
org.apache.log4j.ConsoleAppender(控制臺)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件)
org.apache.log4j.RollingFileAppender(文件到達指定大小時產生一個新文件)
org.apache.log4j.WriterAppender(將日志信息以流格式發送到任何地方)
log4j.appender.mylog.File = dir
log4j.appender.mylog.MaxFileSize=fileSize
log4j.appender.mylog.MaxBackupIndex=num設置保存備份文件數量
log4j.appender.appenderName.layout = 布局類型 (設置布局類型)
打印參數如下:
首先需要導入日志類
二.commons-logging介紹
log4j與commons-logging兩個包,都是記日志的,為什么要兩個一起用呢?
commons-logging是為"所有的Java日志實現"提供一個統一的接口,它自身的日志功能平常弱,而log4j功能非常強大全面,所以拿兩者配合使用.
commons-logging工作原理:
1. 首先在classpath下尋找自己的配置文件commons-logging.properties,如果找到,則使用其中定義的Log實現類
2. 如果找不到commons-logging.properties文件,則在查找是否已定義系統環境變量org.apache.commons.logging.Log,找到則使用其定義的Log實現類
3. 查看classpath中是否有Log4j的包,如果發現,則自動使用Log4j作為日志實現類
4. 使用JDK自身的日志實現類(JDK1.4以后才有日志實現類)
5. 使用commons-logging自己提供的一個簡單的日志實現類SimpleLog
(以上順序不保證完全準確,請參考官方文檔)
commons-logging總是能找到一個日志實現類,并且盡可能找到一個"最合適"的日志實現類.
1、可以不需要配置文件
2、自動判斷有沒有Log4j包,有則自動使用之
3、最悲觀的情況下也總能保證提供一個日志實現(SimpleLog)
另外一直覺得log4j的使用方式有點問題
static Logger logger = Logger.getLogger(message);
每個需要寫日志的java類都得創建一個static logger實例,如果java類很多的話,那創建這些static對象的開銷將非常大,所以最后自己寫一個log類,有一個靜態方法可以得到logger實例
LOG4J的配置之簡單使它遍及于越來越多的應用中了:Log4J配置文件實現了輸出到控制臺、文件、 回滾文件、發送日志郵件、輸出到數據庫日志表、自定義標簽等全套功能。擇其一二使用就夠用了
log4j.rootLogger=DEBUG,CONSOLE,A1,im
log4j.addivity.org.apache=true
# 應用于控制臺
#應用于文件
一.Log4j
1.簡介
Log4j是Apache的一個開放源代碼項目
使用Log4j,我們可以很方便的來記錄日志.
從http://www.apache.org/dist/logging/log4j/1.2.14/下載最新的穩定版本
2.用法
把log4j-1.2.14.jar丟到lib目錄下,使用log4j前需要定義配置文件,也可以不使用,而是在代碼中配置log4j環境.但是使用配置文件使應用程序更加靈活。
log4j配置文件有三個主要的組件:Logger,Appender和Layout,分別為日志類型,日志輸出目的地,日志輸出格式.
跟proxool類似,log4j支持兩種類型的配置文件,xml和properties
log4j.properties配置文件如下:(需要把log4j的配置文件放在classpath下)
log4j.rootLogger = [level], appenderName, appenderName, ... (level是錯誤級別,appenderName是輸出目的地,可以定義多個)
level優先級分別為FATAL、ERROR、WARN、INFO、DEBUG 5個級別.通過定義的級別,你可以控制程序中的日志輸出.比如在這里定義了ERROR級別,程序中只有FARAL、ERROR 級別的LOG會被輸出.
log4j.appender.appenderName = 輸出目的地(這里的appenderName是在前面定義的,可任意起名)
Log4j提供的輸出目的地有以下幾種:
org.apache.log4j.ConsoleAppender(控制臺)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件)
org.apache.log4j.RollingFileAppender(文件到達指定大小時產生一個新文件)
org.apache.log4j.WriterAppender(將日志信息以流格式發送到任何地方)
log4j.appender.mylog.File = dir
log4j.appender.mylog.MaxFileSize=fileSize
log4j.appender.mylog.MaxBackupIndex=num設置保存備份文件數量
log4j.appender.appenderName.layout = 布局類型 (設置布局類型)
Log4j提供的layout有以下4種: org.apache.log4j.HTMLLayout(以HTML表格形式布局) org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串) org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息) org.apache.log4j.PatternLayout(可以靈活地指定布局模式)如果使用PatternLayout布局就要指定的打印信息的具體格式ConversionPattern,
打印參數如下:
%m 輸出代碼中指定的消息 %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL %r 輸出自應用啟動到輸出該log信息耗費的毫秒數 %c 輸出所屬的類目,通常就是所在類的全名 %t 輸出產生該日志事件的線程名 %n 輸出一個回車換行符,Windows為"rn",Unix為"n" %d 輸出日志時間,比如:%d{yyyy MMM dd HH:mm:ss,SSS},輸出:2007年5月17日 19:30:00,000 %l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數 [QC]是log信息的開頭,可以為任意字符,一般為項目簡稱最簡單通用的配置文件(從控制臺打印):
log4j.rootLogger=info,mylog log4j.appender.mylog=org.apache.log4j.ConsoleAppender log4j.appender.mylog.layout=org.apache.log4j.PatternLayout log4j.appender.mylog.layout.ConversionPattern=[-] %p %d{yyyy-MM-dd HH:mm:ss} %m %n 或者 log4j.rootLogger=info,mylog log4j.appender.mylog=org.apache.log4j.ConsoleAppender log4j.appender.mylog.layout=org.apache.log4j.SimpleLayout在代碼中log4j的使用:
首先需要導入日志類
import org.arache.log4j.Logger; static Logger logger = Logger.getLogger(your-className.class); #需要插入日志的地方只需 logger.debug(your-message); logger.info(your-message); logger.warn(your-message); logger.error(your-message); logger.fatal(your-message);寫程序的時候,為了調試,會加入大量的logger信息,當然程序調試完畢不需要這些輸出信息時,只需把輸出的級別調高,如調到error級別,這樣error以下級別的logger就不會出輸出.非常簡單,方便.
二.commons-logging介紹
log4j與commons-logging兩個包,都是記日志的,為什么要兩個一起用呢?
commons-logging是為"所有的Java日志實現"提供一個統一的接口,它自身的日志功能平常弱,而log4j功能非常強大全面,所以拿兩者配合使用.
commons-logging工作原理:
1. 首先在classpath下尋找自己的配置文件commons-logging.properties,如果找到,則使用其中定義的Log實現類
2. 如果找不到commons-logging.properties文件,則在查找是否已定義系統環境變量org.apache.commons.logging.Log,找到則使用其定義的Log實現類
3. 查看classpath中是否有Log4j的包,如果發現,則自動使用Log4j作為日志實現類
4. 使用JDK自身的日志實現類(JDK1.4以后才有日志實現類)
5. 使用commons-logging自己提供的一個簡單的日志實現類SimpleLog
(以上順序不保證完全準確,請參考官方文檔)
commons-logging總是能找到一個日志實現類,并且盡可能找到一個"最合適"的日志實現類.
1、可以不需要配置文件
2、自動判斷有沒有Log4j包,有則自動使用之
3、最悲觀的情況下也總能保證提供一個日志實現(SimpleLog)
另外一直覺得log4j的使用方式有點問題
static Logger logger = Logger.getLogger(message);
每個需要寫日志的java類都得創建一個static logger實例,如果java類很多的話,那創建這些static對象的開銷將非常大,所以最后自己寫一個log類,有一個靜態方法可以得到logger實例
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class Logs { private static Log log; static{ log=LogFactory.getLog(Logs.class); } public static Log getLogger(){ return log; } }三.關于Log4j比較全面的配置
LOG4J的配置之簡單使它遍及于越來越多的應用中了:Log4J配置文件實現了輸出到控制臺、文件、 回滾文件、發送日志郵件、輸出到數據庫日志表、自定義標簽等全套功能。擇其一二使用就夠用了
log4j.rootLogger=DEBUG,CONSOLE,A1,im
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}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%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 # Use this layout for LogFactor 5 analysis# 應用于文件回滾
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#應用于socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender log4j.appender.SOCKET.RemoteHost=localhost log4j.appender.SOCKET.Port=5001 log4j.appender.SOCKET.LocationInfo=true # Set up for Log Facter 5 log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n # Log Factor 5 Appender log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000# 發送日志給郵件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.appender.MAIL.Threshold=FATAL log4j.appender.MAIL.BufferSize=10 log4j.appender.MAIL.From=web@www.wuset.com log4j.appender.MAIL.SMTPHost=www.wusetu.com log4j.appender.MAIL.Subject=Log4J Message log4j.appender.MAIL.To=web@www.wusetu.com log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n# 用于數據庫
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= log4j.appender.db.sql=INSERT INTO SS_LOG4J_LOG (PRIORITY,LOGDATE,CLASS,METHOD,MSG) VALUES('%p','%d{yyyy-MM-dd HH:mm:ss}','%C','%M','%m') log4j.appender.db.layout=org.apache.log4j.PatternLayout log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <PRE class=java name="code"> log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.File=SampleMessages.log4j log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j' log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout </PRE> <BR> <BR><SPAN style="COLOR: green">#自定義Appender </SPAN> <BR><PRE class=java name="code">log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender log4j.appender.im.host = mail.cybercorlin.net log4j.appender.im.username = username log4j.appender.im.password = password log4j.appender.im.recipient = corlin@cybercorlin.net log4j.appender.im.layout=org.apache.log4j.PatternLayout log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</PRE> <BR> <BR>