<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中文手冊(cè)下載地址http://www.matrix.org.cn/resource/upload/forum/2006_04_07_205056_ZCxoePRlHJ.pdf

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

    當(dāng)你在開發(fā)程序的時(shí)候, 調(diào)試(debugging)和日志(logging)都是非常重要的工作, 但是, 現(xiàn)在有太多的 logging API 問世, 因?yàn)樗麄兌疾诲e(cuò), 很難做一個(gè)抉擇. 國外 java 論壇對(duì)于這些 logging 方式也是有一番討論.

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

    有興趣者請(qǐng)自行參閱參考文件.

    快速使用 Logging 其實(shí) logging 非常簡(jiǎn)單去使用, 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");
    }

    }

    / 放置一個(gè) jsp 測(cè)試 test-commons-logging.jsp

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

    你將會(huì)看到 tomcat console 會(huì)有下面輸出

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

    是因?yàn)槟氵€沒有配置 commons-logging.properties, 馬上會(huì)為你介紹 ~~~.

    設(shè)定 commons-logging.properties 你可以設(shè)置你的 log factory 是要使用哪一個(gè) 我以 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
    接著根據(jù)你的 Logger 撰寫符合他的 properties Log4j 為例子 你就要在
    /WEB-INF/classes/
    下放置一個(gè)

    //
    日志輸出到文件
    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

    //
    日志輸出到控制臺(tái)
    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
    #
    日志的錯(cuò)誤級(jí)別
    log4j.appender.MAIL.Threshold=ERROR
    #
    緩存文件大小,日志達(dá)到512K時(shí)發(fā)送Email
    log4j.appender.MAIL.BufferSize=512
    #
    發(fā)件人
    log4j.appender.MAIL.From=webmaster@bcxy.com
    #
    發(fā)送郵件的服務(wù)器
    log4j.appender.MAIL.SMTPHost=smtp.163.com
    #
    郵件的標(biāo)題
    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


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

    不過為了增加產(chǎn)品的通用性, 避免移植時(shí)候的麻煩, 新的產(chǎn)品及項(xiàng)目, 我會(huì)將他改成 commons-logging api 去調(diào)用.

    如果你對(duì)commons-logging的工作原理不是很了解,請(qǐng)參考<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的配置之簡(jiǎn)單使它遍及于越來越多的應(yīng)用中了:Log4J配置文件實(shí)現(xiàn)了輸出到控制臺(tái)、文件、回滾文件、發(fā)送日志郵件、輸出到數(shù)據(jù)庫日志表、自定義標(biāo)簽等全套功能。擇其一二使用就夠用了,



    log4j.rootLogger=DEBUG,CONSOLE,A1,im
    log4j.addivity.org.apache=true



    # 應(yīng)用于控制臺(tái)

    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


    #應(yīng)用于文件

    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



    # 應(yīng)用于文件回滾

    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


    #應(yīng)用于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



    # 用于數(shù)據(jù)庫
    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 蘆葦 閱讀(5930) 評(píng)論(3)  編輯  收藏 所屬分類: JAVA其他

    Feedback

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

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

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

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


    二 具體實(shí)現(xiàn)

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

    private static Log log = LogFactory.getLog(xxxx.class);
    為什么要使用static?因?yàn)楸苊猱a(chǎn)生多個(gè)實(shí)例
    為什么不使用this.class?因?yàn)槭莝tatic不能用this(我經(jīng)常犯這個(gè)錯(cuò)誤。。。)
    為什么不使new XXXX().getClass()?因?yàn)椤!!!D悴履兀?
    5.根據(jù)實(shí)際需要log.debug()、log.info()、log.warn()、log.error()、log.fatal() 就可以輸出不同等級(jí)的log


    三 log的等級(jí)

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


    四 log4j的配制

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

    }
    ========================================================================================
    運(yùn)行效果
    ========================================================================================
    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生成,里邊的內(nèi)容為:
    ========================================================================================
    <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>
    ========================================================================================
    仔細(xì)看一下會(huì)發(fā)現(xiàn),雖然我們?cè)诖a里寫了log.debug("debug")但是debug并沒有出現(xiàn)在log中,這是因?yàn)槲覀兣渲梦募校x了log的等級(jí)為INFO,debug的等級(jí)小于info,所以不會(huì)顯示,而warn,error的大于info,所以也會(huì)被顯示出來


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


      回復(fù)  更多評(píng)論
      

    # re: log4j和commons.logging日志記錄的使用方法 2008-03-11 14:09 蘆葦
    經(jīng)過測(cè)試的log4j.properties文件---用于數(shù)據(jù)庫的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')
      回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 韩国18福利视频免费观看| jizz中国免费| 国产婷婷综合丁香亚洲欧洲| 九九九国产精品成人免费视频| 亚洲av无码专区在线电影| 亚洲日韩乱码中文字幕| 亚洲精品天堂成人片AV在线播放| 国产成人综合亚洲AV第一页| 亚洲男人av香蕉爽爽爽爽| 亚洲色欲久久久久综合网| 久久久久噜噜噜亚洲熟女综合| 国产亚洲成人在线播放va| 国产亚洲AV无码AV男人的天堂| 久久亚洲国产欧洲精品一| 婷婷亚洲综合五月天小说 | 久久国产色AV免费观看| 18禁成人网站免费观看| 国产大片线上免费观看| 我想看一级毛片免费的| 免费a在线观看播放| 中文字幕亚洲天堂| 亚洲国产成人精品不卡青青草原| 久久精品国产亚洲av影院| 亚洲免费视频观看| 亚洲av日韩av激情亚洲| 亚洲网站视频在线观看| 日韩亚洲不卡在线视频中文字幕在线观看| 亚洲 日韩 色 图网站| 美女裸体无遮挡免费视频网站| 视频免费在线观看| 亚洲一级毛片免费在线观看| 成人永久福利免费观看| 亚洲深深色噜噜狠狠爱网站| 7777久久亚洲中文字幕蜜桃| 黑人大战亚洲人精品一区 | 午夜毛片不卡免费观看视频| 国产精品亚洲不卡一区二区三区| 久久精品亚洲中文字幕无码网站| 国产成人亚洲合集青青草原精品| 国产尤物在线视精品在亚洲| 永久免费不卡在线观看黄网站|