• Log4j與common-logging

    3
    Java XML C/C++ log4j Go 26533 次瀏覽
    總網上搜了些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 = 布局類型 (設置布局類型)
    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>  

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色