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

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

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

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

    Log4j中文手冊下載地址http://www.matrix.org.cn/resource/upload/forum/2006_04_07_205056_ZCxoePRlHJ.pdf

    log4j的好處在于:
    1.通過修改配置文件,就可以決定log信息輸出到何處(console,文件,...),是否輸出。
    這樣,在系統(tǒng)開發(fā)階段可以打印詳細的log信息以跟蹤系統(tǒng)運行情況,而在系統(tǒng)穩(wěn)定后可以關閉log輸出,從而在能跟蹤系統(tǒng)運行情況的同時,又減少了垃圾代碼(System.out.println(...)等)。
    2.使用log4j,需要整個系統(tǒng)有一個統(tǒng)一的log機制,有利于系統(tǒng)的規(guī)劃。

    當你在開發(fā)程序的時候, 調試(debugging)和日志(logging)都是非常重要的工作, 但是, 現(xiàn)在有太多的 logging API 問世, 因為他們都不錯, 很難做一個抉擇. 國外 java 論壇對于這些 logging 方式也是有一番討論.

    common logging 就是一個在這幾個不同的 logging API 中建立小小的橋梁.目前在 Java 中最有名的 Log 方式, 首推是 Log4j, 另是 JDK 1.4 Logging API. 除此之外, 還有 Avalon 中用的 LogKit 等等 . commons-logging 也有實現(xiàn)一些基本 logging 方式為 NoOpLog SimpleLog. 對于他們的比較不在這次討論范圍,

    有興趣者請自行參閱參考文件.

    快速使用 Logging 其實 logging 非常簡單去使用, commons-logging.jar 放到 /WEB-INF/lib 之下.接著寫以下的代碼

    LoggingTest.java

    package com.softleader.newspaper.java.opensource;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;

    public class LoggingTest {

    Log log = LogFactory.getLog(LoggingTest.class);

    public void hello() {
    log.error("ERROR");
    log.debug("DEBUG");
    log.warn("WARN");
    log.info("INFO");
    log.trace("TRACE");
    System.out.println("OKOK");
    }

    }

    / 放置一個 jsp 測試 test-commons-logging.jsp

    <%@ page import="com.softleader.newspaper.java.opensource.LoggingTest" %>
    <% LoggingTest test = new LoggingTest(); test.hello();%>

    你將會看到 tomcat console 會有下面輸出

    log4j:WARN No appenders could be found for logger (com.softleader.newspaper.java.opensource.LoggingTest).
    log4j:WARN Please initialize the log4j system properly.OKOK

    是因為你還沒有配置 commons-logging.properties, 馬上會為你介紹 ~~~.

    設定 commons-logging.properties 你可以設置你的 log factory 是要使用哪一個 我以 Log4J 為例子 /WEB-INF/classes/commons-logging.properties 中寫入
    org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog
    如果你 server 是使用 jdk1.4 以上的版本
    可以使用 org.apache.commons.logging.impl.Jdk14Logger
    接著根據你的 Logger 撰寫符合他的 properties Log4j 為例子 你就要在
    /WEB-INF/classes/
    下放置一個

    //
    日志輸出到文件
    log4j.rootLogger=DEBUG, A_default
    log4j.appender.A_default=org.apache.log4j.RollingFileAppender
    log4j.appender.A_default.File=c://log/test.log
    log4j.appender.A_default.MaxFileSize=4000KB
    log4j.appender.A_default.MaxBackupIndex=10
    log4j.appender.A_default.layout=org.apache.log4j.PatternLayout
    log4j.appender.A_default.layout.ConversionPattern=%d{ISO8601} - %p - %m%n

    //
    日志輸出到控制臺
    log4j.rootLogger=INFO, A1
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n

    //
    發(fā)送郵件
    # Configuration for receiving e-mails when ERROR messages occur.

    #
    自定義的Appender
    log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
    #
    日志的錯誤級別
    log4j.appender.MAIL.Threshold=ERROR
    #
    緩存文件大小,日志達到512K時發(fā)送Email
    log4j.appender.MAIL.BufferSize=512
    #
    發(fā)件人
    log4j.appender.MAIL.From=webmaster@bcxy.com
    #
    發(fā)送郵件的服務器
    log4j.appender.MAIL.SMTPHost=smtp.163.com
    #
    郵件的標題
    log4j.appender.MAIL.Subject=Log4J Message
    #
    日志郵件的接收者
    log4j.appender.MAIL.To=ezerg@126.com
    #
    日志PatternLayout
    log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
    #
    日志的格式
    log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


    此時你去執(zhí)行 test-commons-logging.jsp 輸出的內容, 就會記錄在你的 c:\log 目錄的 test.log 中了 ps:如果沒有相關的 class 會使用到 SimpLog, 此時要設定的是
    simplelog.properties
    結論以我自己本身使用的經驗, Log4j 可以滿足所有工程師, 所以我也是直接使用 log4j 而沒有使用 commons-logging.

    不過為了增加產品的通用性, 避免移植時候的麻煩, 新的產品及項目, 我會將他改成 commons-logging api 去調用.

    如果你對commons-logging的工作原理不是很了解,請參考<commons-logging的使用方法>

    另,mvnforum里面的commons-logging.properties寫法:
    # This is configuration file which used to config Logging for mvnForum application
    # mvnForum supports 2 Loggings: Log4J and jzonic
    # Depend on your web server, you should choose a logging properly


    # IMPORTANT NOTE FOR TOMCAT 5.x USERS:
    #
    # By default, Tomcat 5.x will not work with Log4J.
    # However, this file (commons-logging.properties) with a line
    # config : org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
    # make Tomcat 5.x and Log4J work happyly together forever, I dont know why :-)



    # Log4J
    # This used to config logging Log4J
    # Note that by default, common logging will look for Log4J first
    # Comment out folling line to if you will use Jlo logging (also remember to enable Jlo below)

    org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory

    # Jlo
    # jlo.xml config logging which only log the statements (DEBUG, ERROR, TRACE, INFO, WARN)
    # from the packages start with net.myvietnam and com.mvnforum.
    # See properities/jlo.xml for detail about this logging
    # See http://jzonic.org for documentation
    # If you want to extend mvnForum application, you should be aware of that

    # Uncomment folling line to choose jlo logging
    # You will need Jlo if Log4j could not run on Tomcat 5.0.x, Tomcat 5.5.x or JRun 4
    # NOTE: read comment above about Tomcat 5.x issue

    # org.apache.commons.logging.LogFactory=org.jzonic.jlo.LogManager

    ====================================================================

    LOG4J的配置之簡單使它遍及于越來越多的應用中了:Log4J配置文件實現(xiàn)了輸出到控制臺、文件、回滾文件、發(fā)送日志郵件、輸出到數據庫日志表、自定義標簽等全套功能。擇其一二使用就夠用了,



    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%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



    # 發(fā)送日志給郵件

    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.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %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=SampleMessages.log4j
    log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
    log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

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


    posted on 2008-03-11 11:48 蘆葦 閱讀(5929) 評論(3)  編輯  收藏 所屬分類: JAVA其他

    Feedback

    # re: log4j和commons.logging日志記錄的使用方法 2008-03-11 14:08 蘆葦
    模式字符串簡介:
      %c:Category名稱。還可以使用%c{n}的格式輸出Category的部分名稱,其中n為正整數,輸出時會從Category名稱的右側起查n個".",然后截取第n個"."右側的部分輸出,例如Category的名稱為"x.y.z",指定格式為"%c{2}",則輸出"y.z"。
      %C:輸出信息時Category所在類的名稱,也可以使用%C{n}的格式輸出。
      %d:輸出信息的時間,也可以用%d{FormatString}的格式輸出,其中FormatString的值請參考TTCCLayout的setDateFormat方法,但NULL和RELATIVE在%d中無法使用。
      %F:輸出信息時Category所在類文件的名稱。
      %l:輸出信息時Category所在的位置,使用"%C.%M(%F:%L)"可以產生同樣的效果。
      %L:輸出信息時Category在類文件中的行號。
      %m:信息本身。
      %M:輸出信息時Category所在的方法。
      %n:換行符,可以理解成回車。
      %p:日志級別。
      %r:輸出信息所用的時間,以毫秒為單位。
      %t:當前線程。
      %x:輸出和當前線程相關的NDC信息。
      %X:輸出與當前現(xiàn)成相關的MDC信息。
      %%:輸出%。
    此外,還可以在%與模式字符之間加上修飾符來設置輸出時的最小寬度、最大寬度及文本對齊方式,例如:
      %30d{DATE}:按當前所在地區(qū)顯示日期和時間,并指定最小寬度為30,當輸出信息少于30個字符時會補以空格并右對齊。
      %-30d{DATE}:也是按當前所在地區(qū)顯示日期和時間,指定最小寬度為30,并在字符少于30時補以空格,但由于使用了"-",因此對齊方式為左對齊,與默認情況一樣。
      %.40d{DATE}:也是按當前所在地區(qū)顯示日期和時間,但指定最大寬度為40,當輸出信息多于40個字符時會將左邊多出的字符截掉。此外,最大寬度只支持默認的左對齊方式,而不支持右對齊。
      %30.40d{DATE}:如果輸出信息少于30個字符就補空格并右對齊,如果多于40個字符,就將左邊多出的字符截掉。
      %-30.40d{DATE}:如果輸出信息少于30個字符就補空格并左對齊,如果多于40個字符,就將左邊多出的字符截掉。
      回復  更多評論
      

    # re: log4j和commons.logging日志記錄的使用方法 2008-03-11 14:08 蘆葦
    一 最好與commons-logging一起用,why?

    1.標準接口,即使將來脫離了log4j也一樣用
    2.簡化了編碼,減少耦合度:不需在代碼中指定log4j配制文件位置,代碼中不需要引用log4j的包
    3.基本所有框架都是這么用的。。。。。。(我相信群眾)

    附加提供一下commons-logging尋找配置文件的順序(從別人那抄的)
    1) 首先在classpath下尋找自己的配置文件commons-logging.properties,如果找到,則使用其中定義的Log實現(xiàn)類;
    2) 如果找不到commons-logging.properties文件,則在查找是否已定義系統(tǒng)環(huán)境變量org.apache.commons.logging.Log,找到則使用其定義的Log實現(xiàn)類;
    3) 否則,查看classpath中是否有Log4j的包,如果發(fā)現(xiàn),則自動使用Log4j作為日志實現(xiàn)類;
    4) 否則,使用JDK自身的日志實現(xiàn)類(JDK1.4以后才有日志實現(xiàn)類);
    5) 否則,使用commons-logging自己提供的一個簡單的日志實現(xiàn)類SimpleLog;


    二 具體實現(xiàn)

    1.把commons-logging的jar加到classpath中
    2.把log4j的jar加到classpath中
    3.在classpath的根目錄下,建立log4j.properties(必須是這個地方,必須叫這個名,才不用特殊配置),可以直接復制后邊的模板
    4.在需要log的類中:
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;

    private static Log log = LogFactory.getLog(xxxx.class);
    為什么要使用static?因為避免產生多個實例
    為什么不使用this.class?因為是static不能用this(我經常犯這個錯誤。。。)
    為什么不使new XXXX().getClass()?因為。。。。你猜呢?
    5.根據實際需要log.debug()、log.info()、log.warn()、log.error()、log.fatal() 就可以輸出不同等級的log


    三 log的等級

    1.為什么需要等級?寫代碼的時候可能需要很多調試信息,運行的時候可能需要顯示提示信息,如果在服務器上發(fā)生嚴重錯誤的時候,可能需要給管理員發(fā)郵件。這種:調試,提示,錯誤就是等級。
    2.都有什么等級? 調試(DEBUG)<信息(INFO)<警告(WARN)<錯誤(ERROR)<致命錯誤(FATAL)
    3.怎么用? log.debug() log.info() log.warn() log.error() log.fatal()依次對應上邊的等級


    四 log4j的配制

    1.基本參數解釋:
    ⑴全局配制
    log4j.rootLogger = [ level ] , appenderName, appenderName,..........appenderName
    ★log4j.rootLogger的意思可以理解為:根log或者所有的log
    ★level就是輸出級別,只能設置一個值。
    ·關于等級,前邊已經說過了有5種,他們之間的關系可以理解為:
    調試(DEBUG):包含調試(DEBUG)、信息(INFO)、警告(WARN)、錯誤(ERROR)、致命錯誤(FATAL)
    信息(INFO):包含信息(INFO)、警告(WARN)、錯誤(ERROR)、致命錯誤(FATAL)
    警告(WARN):包含警告(WARN)、錯誤(ERROR)、致命錯誤(FATAL)
    錯誤(ERROR):包含錯誤(ERROR)、致命錯誤(FATAL)
    致命錯誤(FATAL):只有他自己
    這樣,如果log4j.rootLogger = INFO,那么 INFO,WARN,ERROR,F(xiàn)ATAL就全部會被輸出
    如果log4j.rootLogger = ERROR,那么ERROR,F(xiàn)ATAL就全部會被輸出
    ★appenderName就是記錄的目標,目標可以多個,中間用『,』分割,appenderName是自己定義的,換句話說,名字是隨便起的,起了名之后,就需要在下邊設定具體配制
    總結一下這部分,比如說有這么一句log4j.rootLogger = INFO , F1,F2那么就以為著要將所有INFO,WARN,ERROR,F(xiàn)ATAL的log全部輸出到F1,F(xiàn)2上。F1,F(xiàn)2是什么?往下看。。。。
    ⑵具體配制
    log4j.appender.F1=org.apache.log4j.ConsoleAppender
    log4j.appender.F1.layout=org.apache.log4j.PatternLayout
    log4j.appender.F1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
    ★log4j.appender.F1=org.apache.log4j.ConsoleAppender的意思就是:將F1設置為控制臺輸出
    ·還可以設置成什么?
    org.apache.log4j.ConsoleAppender(控制臺),
    org.apache.log4j.FileAppender(文件),
    org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),
    org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
    org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)
    ★log4j.appender.F1.layout=org.apache.log4j.PatternLayout的意思就是:將F1的輸出布局設置為自定義輸出布局。
    ·還可以設置成什么?
    org.apache.log4j.HTMLLayout(以HTML表格形式布局)
    org.apache.log4j.xml.XMLLayout(以XML形式布局)
    org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
    org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
    org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)
    ★log4j.appender.F1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n既然上邊定義的是自定義輸出布局,那么就要定義一下具體輸出什么樣了~~上邊的%c %p %m 等以%開頭的都是模式字符串,除了模式字符串外[]-空格等這些字符會按照原樣顯示。
    ·模式字符串解釋:
    %m:消息本身
    %p:消息的級別INFO,WARN,ERROR。。。
    %r:從程序開始執(zhí)行到當前日志產生時的時間間隔(微秒)
    %c:輸出當前日志動作所在的category名稱。例如:如果category名稱是"a.b.c","%c{2}"將會輸出"b.c". {2}意謂著輸出“以點分隔開的category名稱的后兩個組件”,如果 {n}沒有,將會輸出整個category名稱.
    %t:輸出當前線程的名稱
    %x:輸出和當前線程相關聯(lián)的NDC,尤其用到像java servlets這樣的多客戶多線程的應用中。
    %n:輸出平臺相關的換行符。
    %%:輸出一個"%"字符
    %d:輸出日志產生時候的日期,當然可以對日期的格式進行定制。例如:%d{HH:mm:ss,SSSS}或者是%d{dd MMM yyyy HH:mm:ss,SSSS},如果沒有指定后面的格式,將會輸出ISO8601的格式。
    %l:輸出位置信息,相當于%C.%M(%F:%L)的組合。
    %C:輸出日志消息產生時所在的類名,如果類名是“test.page.Class1”%C{1}表示輸出類名"Class1",%C{2}輸出"page.Class1",而%C則輸出"test.page.Class1"。
    %M:輸出日志消息產生時的方法名稱
    %F:輸出日志消息產生時所在的文件名稱
    %L:輸出代碼中的行號
    ·可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
    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字符,就從左邊交遠銷出的字符截掉。
    總結一下,現(xiàn)在來我們所配制的F1的全部內容
    ·我們把它配制成了屏幕輸出
    ·輸出的布局為:自定義布局
    ·我們又定義了自定義布局的格式:日期時間(格式為:yyyy-MM-dd HH:mm:ss,SSS)[產生該日志的包名類名方法名] [等級] 信息+回車
    如果想配制F2為每天產生一個日志文件,并且保存為xml,就這么寫:
    log4j.appender.F2=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.F2.layout=org.apache.log4j.xml.XMLLayout
    這樣就可以了嗎?當然不是,既然保存為文件。。至少要指定一個文件名吧
    log4j.appender.F2.File=c:/logs/log.xml
    可以了嗎?可以運行了。。。但是。。既然每天都產生一個文件,那么前一天的怎么辦呢?
    log4j.appender.F2.DatePattern=yyyyMMdd'.xml.back'
    這樣log4j會在第一次產生今天的log的同時,將昨天的log備份為 log文件名.擴展名yyyyMMdd.xml.back。對應我們這個文件,今天的log到明天有新log產生的時候,就會變?yōu)閘og.xml20070420.xml.back
    這樣的參數到底有多少?常用的有:
    ★ConsoleAppender選項
    ·Threshold=WARN:指定日志消息的輸出最低層次。
    ·ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
    ·Target=System.err:默認情況下是:System.out,指定輸出控制臺
    ★FileAppender 選項
    ·Threshold=WARN:指定日志消息的輸出最低層次。
    ·ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
    ·File=mylog.txt:指定消息輸出到mylog.txt文件。
    ·Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
    ★RollingFileAppender 選項
    ·Threshold=WARN:指定日志消息的輸出最低層次。
    ·ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
    ·File=mylog.txt:指定消息輸出到mylog.txt文件。
    ·Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
    ·MaxFileSize=100KB: 后綴可以是KB, MB 或者是 GB. 在日志文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。
    ·MaxBackupIndex=2:指定可以產生的滾動文件的最大數。
    ★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: 每分鐘
    ★PatternLayout 選項
    ·ConversionPattern=%m%n :指定怎樣格式化指定的消息。
    ★HTMLLayout 選項
    ·LocationInfo=true:默認值是false,輸出java文件名稱和行號
    ·Title=my app file: 默認值是 Log4J Log Messages.
    ★XMLLayout 選項
    ·LocationInfo=true:默認值是false,輸出java文件和行號
    現(xiàn)在來看一下我們完整的第一個配制文件:
    ========================================================================================
    log4j.rootLogger = INFO,F1,F2

    log4j.appender.F1=org.apache.log4j.ConsoleAppender
    log4j.appender.Threshold=DEBUG
    log4j.appender.F1.Target=System.out
    log4j.appender.F1.layout=org.apache.log4j.PatternLayout
    log4j.appender.F1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n

    log4j.appender.F2=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.F2.File=c:/logs/log.xml
    log4j.appender.F2.DatePattern=yyyyMMdd-HH'.xml.back'
    log4j.appender.F2.layout=org.apache.log4j.xml.XMLLayout
    ========================================================================================
    編段代碼看看效果
    ========================================================================================
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    public class Main{
    private static Log log = LogFactory.getLog(Main.class);
    public static void main(String[] args) throws Exception{
    log.info("info");
    log.debug("debug");
    log.warn("warn");
    log.error("error");
    }

    }
    ========================================================================================
    運行效果
    ========================================================================================
    2007-04-20 12:36:22,531 [cn.yyun.test.Main]-[INFO] info
    2007-04-20 12:36:22,531 [cn.yyun.test.Main]-[WARN] warn
    2007-04-20 12:36:22,531 [cn.yyun.test.Main]-[ERROR] error
    ========================================================================================
    并且在c:/logs/下有l(wèi)og.xml生成,里邊的內容為:
    ========================================================================================
    <log4j:event logger="cn.yyun.test.Main" timestamp="1177043782531" level="INFO" thread="main">
    <log4j:message><![CDATA[info]]></log4j:message>
    </log4j:event>

    <log4j:event logger="cn.yyun.test.Main" timestamp="1177043782531" level="WARN" thread="main">
    <log4j:message><![CDATA[warn]]></log4j:message>
    </log4j:event>

    <log4j:event logger="cn.yyun.test.Main" timestamp="1177043782531" level="ERROR" thread="main">
    <log4j:message><![CDATA[error]]></log4j:message>
    </log4j:event>
    ========================================================================================
    仔細看一下會發(fā)現(xiàn),雖然我們在代碼里寫了log.debug("debug")但是debug并沒有出現(xiàn)在log中,這是因為我們配置文件中,定義了log的等級為INFO,debug的等級小于info,所以不會顯示,而warn,error的大于info,所以也會被顯示出來


    2.根據package生成不同的log文件
    ⑴配置
    log4j.logger.cn.yyun.test.abc=INFO,abc2,abc1

    log4j.appender.abc2=org.apache.log4j.ConsoleAppender
    log4j.appender.abc2.layout=org.apache.log4j.PatternLayout
    log4j.appender.abc2.layout.ConversionPattern=abc:[%p] %m%n

    log4j.appender.abc1=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.abc1.File=C:/logs/abc.log
    log4j.appender.abc1.DatePattern='.'yyyyMMdd
    log4j.appender.abc1.layout=org.apache.log4j.PatternLayout
    log4j.appender.abc1.layout.ConversionPattern=%d %r [%t] %5p - %m%n

    log4j.logger.cn.yyun.test.def=INFO,def
    log4j.appender.def=org.apache.log4j.ConsoleAppender
    log4j.appender.def.layout=org.apache.log4j.PatternLayout
    log4j.appender.def.layout.ConversionPattern=def: [%p] %m%n

    把logger.cn.yyun.test.abc換成需要的package就可以了(整個log4j配制文件中只有這些就可以了 )。但是這樣會有另一個問題,如果cn.yyun.test.Main這個類中,如果有l(wèi)og操作,會報告:log4j:WARN No appenders could be found for logger (cn.yyun.test.Main).所以要加上log4j.rootCategory=INFO,F1 這樣所有的log都會被紀錄了。。但是這樣又做之后:cn.yyun.test.def里的log,會同時出現(xiàn)在def和F1中,cn.yyun.test.abc里的log,會同時出現(xiàn)在abc1,abc2和F1中。。。。。所以定義的時候一定要規(guī)劃好。
    ⑵制定package的log等級
    log4j.logger.org.hibernate=DEBUG


      回復  更多評論
      

    # re: log4j和commons.logging日志記錄的使用方法 2008-03-11 14:09 蘆葦
    經過測試的log4j.properties文件---用于數據庫的log
    log4j.rootLogger = DEBUG,DATABASE

    log4j.appender.DATABASE = org.apache.log4j.jdbc.JDBCAppender
    log4j.appender.DATABASE.Driver = oracle.jdbc.driver.OracleDriver
    log4j.appender.DATABASE.URL = jdbc:oracle:thin:@192.168.8.2:1521:dssdb
    log4j.appender.DATABASE.User = tom
    log4j.appender.DATABASE.Password = lizhifeng
    log4j.appender.DATABASE.layout = org.apache.log4j.PatternLayout
    log4j.appender.DATABASE.layout.ConversionPattern = INSERT INTO log4j (createDate, thread, priority, category, message) values(sysdate, '%t', '%-5p', '%c', '%m')
      回復  更多評論
      

    主站蜘蛛池模板: 亚洲人成色77777在线观看| 久久精品国产96精品亚洲| 亚洲美女aⅴ久久久91| 日韩免费人妻AV无码专区蜜桃| 亚洲午夜未满十八勿入网站2| 高清永久免费观看| 国产亚洲精品a在线无码| 久久九九久精品国产免费直播| 国产亚洲成av人片在线观看| 青青青国产手机频在线免费观看| 亚洲色欲久久久综合网东京热| 免费国产叼嘿视频大全网站| 18gay台湾男同亚洲男同| 99热在线精品免费全部my| 日本亚洲免费无线码 | 国产亚洲精品91| 亚洲无线一二三四区手机| 最近的2019免费中文字幕| 亚洲网址在线观看你懂的| 日韩视频在线精品视频免费观看 | 97免费人妻无码视频| 亚洲入口无毒网址你懂的| 国产高清在线免费| 免费国产黄网站在线看| 国产亚洲色婷婷久久99精品| 国内精品免费麻豆网站91麻豆 | 久久精品国产亚洲αv忘忧草| 日韩午夜免费视频| 国产色爽免费无码视频| 亚洲精品在线不卡| 免费A级毛片无码A∨男男| 国内少妇偷人精品视频免费| 日本亚洲精品色婷婷在线影院| 午夜精品在线免费观看| 久久www免费人成看国产片| 91亚洲导航深夜福利| 日本不卡视频免费| 国产一区二区三区免费| tom影院亚洲国产一区二区| 亚洲AV中文无码乱人伦| 69av免费视频|