<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無線&移動互聯網技術研發

    換位思考·····
    posts - 19, comments - 53, trackbacks - 0, articles - 283
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    log4j 記錄日志

    Posted on 2009-05-23 14:22 Gavin.lee 閱讀(564) 評論(0)  編輯  收藏 所屬分類: Log && File Operate

    記: 公司里用的是文件寫入的方式來記錄日志,理論很簡單,對業務效果也還不錯,但是總感覺有點欠妥,其實自己很早就接觸了log4j,但是都沒用好好的使用,所以在對log4j的使用上不敢多說什么,也就沒理由跟公司提使用log4j。下面我結合網上朋友們的說法,加上自己的理解,整理一下log4j。

    首先,log4j跟dom4j一樣是Apache組織的開源項目,它非常方便。你可以在任意時間,任意時間間隔內輸出日志。

    log4j主要由三大組件組成:
    Logger:log4j的日志實例。
    static Level DEBUG,INFO,WARN,ERROR,FATAL,ALL,OFF.
    DEBUG Level指出細粒度信息事件對調試應用程序是非常有幫助的。
    INFO level表明 消息在粗粒度級別上突出強調應用程序的運行過程。
    WARN level表明會出現潛在錯誤的情形。
    ERROR level指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。
    FATAL level指出每個嚴重的錯誤事件將會導致應用程序的退出。
    另外,還有兩個可用的特別的日志記錄級別:
    ALL Level是最低等級的,用于打開所有日志記錄。
    OFF Level是最高等級的,用于關閉所有日志記錄。

    Appender:定義log4j輸出目的地。
            org.apache.log4j.ConsoleAppender(控制臺), 
            org.apache.log4j.FileAppender(文件), 
            org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件), 
            org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件), 
            org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)
    ConsoleAppender選項
    Threshold=DEBUG:指定日志消息的輸出最低層次。
    ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
    Target=System.err:默認情況下是:System.out,指定輸出控制臺
    1.FileAppender 選項
    Threshold=DEBUF:指定日志消息的輸出最低層次。
    ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
    File=mylog.txt:指定消息輸出到mylog.txt文件。
    Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
    2.RollingFileAppender 選項
    Threshold=DEBUG:指定日志消息的輸出最低層次。
    ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
    File=mylog.txt:指定消息輸出到mylog.txt文件。
    Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
    MaxFileSize=100KB: 后綴可以是KB, MB 或者是 GB. 在日志文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。
    MaxBackupIndex=2:指定可以產生的滾動文件的最大數。
    log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
    3.DailyRollingFileAppender 選項
    Threshold=WARN:指定日志消息的輸出最低層次。
    ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
    File=mylog.txt:指定消息輸出到mylog.txt文件。
    Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
    DatePattern='.'yyyy-ww:每周滾動一次文件,即每周產生一個新的文件。當然也可以指定按月、周、天、時和分。即對應的格式如下:
    1)'.'yyyy-MM: 每月
    2)'.'yyyy-ww: 每周
    3)'.'yyyy-MM-dd: 每天
    4)'.'yyyy-MM-dd-a: 每天兩次
    5)'.'yyyy-MM-dd-HH: 每小時
    6)'.'yyyy-MM-dd-HH-mm: 每分鐘

    Layout:定義log4j輸出的格式。 
            org.apache.log4j.HTMLLayout(以HTML表格形式布局), 
            org.apache.log4j.PatternLayout(可以靈活地指定布局模式), 
            org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串), 
            org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)
    日志信息格式中幾個符號所代表的含義:
     -X號: X信息輸出時左對齊;
     %p: 輸出日志信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL,
     %d: 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
     %r: 輸出自應用啟動到輸出該log信息耗費的毫秒數
     %c: 輸出日志信息所屬的類目,通常就是所在類的全名
     %t: 輸出產生該日志事件的線程名
     %l: 輸出日志事件的發生位置,相當于%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.java:10)
     %x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
     %%: 輸出一個"%"字符
     %F: 輸出日志消息產生時所在的文件名稱
     %L: 輸出代碼中的行號
     %m: 輸出代碼中指定的消息,產生的日志具體信息
     %n: 輸出一個回車換行符,Windows平臺為"\r\n",Unix平臺為"\n"輸出日志信息換行
     可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
     1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,默認的情況下右對齊。
     2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,"-"號指定左對齊。
     3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大于30的話,就會將左邊多出的字符截掉,但小于30的話也不會有空格。
     4)%20.30c:如果category的名稱小于20就補空格,并且右對齊,如果其名稱長于30字符,就從左邊較遠輸出的字符截掉。


    理論就理解這么多了,以后有機會用的時候再去說吧。現在說多了怕錯的多了。
    下面來看看怎么使用:
    首先導入log4j需要的包:我用的是 dom4j-1.6.1.jar。這個到Apache去下。
    然后添加配置文件:log4j.properties  or  log4j.xml(其實這兩個還是有點區別的,首先系統會去找xml,找不到xml配置的時候才去讀properties文件,有
                                        人說properties的方案以后會被淘汰掉,這個我就不知道了,我唯一用過的還是properties,不敢多說),把我以前用log4j的時候
                                        使用的properties文件先貼下來:

    其實log4j的記錄不僅僅是記錄到console,file,還可以到mail,jdbc。
    根Logger的配置:設置輸出的優先級,log4j.rootLogger = [ level ] , appenderName, appenderName, …

    ### global config ###
    # log level: DEBUG<INFO<WARN<ERROR<FATAL
    log4j.rootLogger=DEBUG,console,file

    ### appender of console ###
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=[%-5p  %5r %c] ->Thread:%t -file:%F -line:%L  -content:%m%n

    ### appender of file ###
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=c:/exam.log
    log4j.appender.file.MaxFileSize=100KB
    log4j.appender.file.MaxBackupIndex=1
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=[%-5p  %5r  %d{yyyy-MM-dd HH\:mm\:ss.SSS}  %c] -> -%F%L -%m%n




    然后就可以使用了:

    package com.yixun.wap;
    import
     org.apache.log4j.Logger;
    public class TestLog4j 
    {
        
    private static Logger logger = Logger.getLogger(TestLog4j.class
    ); 

        
    public static void main(String[] args) 
    {
            logger.debug(
    "debug "
    );   
            logger.info(
    "info"
    );   
            logger.warn(
    "warn"
    );
            logger.error(
    "error"
    ); 
            logger.faltal(
    "faltal"
    );
        }

    }
    不完全點,待續……

    /**********************csdn上down的,沒用過,貌似是比較全**************************/

    log4j.rootLogger=DEBUG,CONSOLE,DATABASE,FILE
    log4j.addivity.org.apache=true

    # 應用于控制臺
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.Threshold=INFO
    log4j.appender.CONSOLE.Target=System.out
    log4j.appender.CONSOLE.Encoding=GBK
    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.DATABASE=org.apache.log4j.jdbc.JDBCAppender
    log4j.appender.DATABASE.URL=jdbc:oracle:thin:@90.0.12.20:1521:ORCL
    log4j.appender.DATABASE.driver=oracle.jdbc.driver.OracleDriver
    log4j.appender.DATABASE.user=Nation
    log4j.appender.DATABASE.password=1
    log4j.appender.CONSOLE.Threshold=WARN
    log4j.appender.DATABASE.sql=INSERT INTO LOG4J(stamp,thread, infolevel,class,messages) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')
    # INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
    # 寫入數據庫中的表LOG4J的Message字段中,內容%d(日期)%c: 日志信息所在地(類名)%p: 日志信息級別%m: 產生的日志具體信息 %n: 輸出日志信息換行
    log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
    log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

    # 每天新建日志
    log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A1.File=C:/log4j/log
    log4j.appender.A1.Encoding=GBK
    log4j.appender.A1.Threshold=DEBUG
    log4j.appender.A1.DatePattern='.'yyyy-MM-dd
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n

    #應用于文件
    log4j.appender.FILE=org.apache.log4j.FileAppender
    log4j.appender.FILE.File=C:/log4j/file.log
    log4j.appender.FILE.Append=false
    log4j.appender.FILE.Encoding=GBK
    log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
    log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

    # 應用于文件回滾
    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.CONSOLE_FILE.Encoding=GBK
    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

    #自定義Appender
    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

    #應用于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

    主站蜘蛛池模板: 拔擦拔擦8x华人免费久久| 亚洲精品无码不卡在线播放HE| 午夜视频在线观看免费完整版| 国产精品视频免费一区二区三区| 久久精品国产亚洲Aⅴ香蕉| 久久亚洲AV成人出白浆无码国产 | 91免费国产自产地址入| 成人免费网站在线观看| 亚洲区日韩区无码区| 亚洲免费电影网站| 一级毛片免费在线播放| 亚洲免费福利视频| 亚洲国产精品无码久久久| 国产高潮久久免费观看| 国产精品成人免费视频网站京东| 亚洲色偷偷偷鲁综合| 亚洲AV无码一区二区大桥未久| 桃子视频在线观看高清免费视频| 日韩免费观看视频| 无码 免费 国产在线观看91| 妞干网在线免费观看| 美女露100%胸无遮挡免费观看| 黄色网址免费大全| 亚洲第一成年男人的天堂| 色一情一乱一伦一视频免费看| 亚洲综合国产精品第一页| 边摸边脱吃奶边高潮视频免费| 国外亚洲成AV人片在线观看| 免费一级全黄少妇性色生活片| 在线免费观看一级片| 日韩一区二区三区免费播放| 亚洲av无码片在线播放| 成人爽a毛片免费| 亚洲人成人无码网www国产| 一个人免费视频观看在线www| 国产国产人免费视频成69大陆 | 亚洲精品国产高清在线观看| 青娱分类视频精品免费2| 亚洲综合亚洲国产尤物| 91av免费观看| 亚洲电影免费观看|