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

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

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

    明天的明天的明天

    用鍵盤改變生活

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      17 Posts :: 0 Stories :: 19 Comments :: 0 Trackbacks

    第一部分,快速入門

    首先,需要去下載LOG4J這個軟件并解壓縮出其中的log4j.jar.在你的應用程序的classpath中包含該JAR文件,你也可以簡單地將這個文件拷貝到JDK的%java_home%\lib\ext目錄下。
    在作完以上工作后,你可以將下面的代碼保存到名為TestLogging.java中:
    ##############################
    import org.apache.log4j.*;

    // How to use log4j
    public class TestLogging {

    // Initialize a logging category. Here, we get THE ROOT CATEGORY
    //static Category cat = Category.getRoot();
    // Or, get a custom category
    static Category cat = Category.getInstance(TestLogging.class.getName());

    // From here on, log away! Methods are: cat.debug(your_message_string),
    // cat.info(...), cat.warn(...), cat.error(...), cat.fatal(...)

    public static void main(String args[]) {
    // Try a few logging methods
    cat.debug("Start of main()");
    cat.info("Just testing a log message with priority set to INFO");
    cat.warn("Just testing a log message with priority set to WARN");
    cat.error("Just testing a log message with priority set to ERROR");
    cat.fatal("Just testing a log message with priority set to FATAL");

    // Alternate but INCONVENIENT form
    cat.log(Priority.DEBUG, "Calling init()");

    new TestLogging().init();
    }

    public void init() {
    java.util.Properties prop = System.getProperties();
    java.util.Enumeration enum = prop.propertyNames();

    cat.info("***System Environment As Seen By Java***");
    cat.debug("***Format: PROPERTY = VALUE***");

    while (enum.hasMoreElements()) {
    String key = (String) enum.nextElement();
    cat.info(key + " = " + System.getProperty(key));
    }
    }

    }

    ############################################################
    Log4J 默認情況下可以記錄五個層次(由低到高)的日志消息。
    1) debug
    2)info
    3)warn
    4)error
    5)fatal

    在TestLoggin.class的目錄中保存下列行在一個名字為log4j.properties 文件中.默認情況下,當你在代碼中使用getRoot()或getInstance("category_name")時,Log4j會在應用程序的 classpath中查找該文件:
    ############################################
    log4j.rootCategory=DEBUG, dest1
    log4j.appender.dest1=org.apache.log4j.ConsoleAppender
    log4j.appender.dest1.layout=org.apache.log4j.PatternLayout
    ############################################
    ConsoleAppender指定的是控制臺附加器,即日志消息會輸出到控制臺上,而PatternLayout則指定了消息輸出的格式,默認情況下格式為%m%n,%m指定的是消息內容,%n指定的是操作系統平臺上的換行符,這里更類似于C語言中的輸出控制語句。
    現在,你可以編譯并且運行TestLogging.java了,你可以獲得以下輸出結果:

    Start of main()
    Just testing a log message with priority set to INFO
    Just testing a log message with priority set to WARN
    Just testing a log message with priority set to ERROR
    Just testing a log message with priority set to FATAL
    Calling init()
    ***System Environment As Seen By Java***
    ***Format: PROPERTY = VALUE***
    java.runtime.name = Java(TM) 2 Runtime Environment, Standard Edition
    sun.boot.library.path = c:\jdk1.3\jre\bin
    java.vm.version = 1.3.0_02
    java.vm.vendor = Sun Microsystems Inc.
    ... and so on

    如果想打印消息的層次如debug,info,error等,那可以在log4j.properties 文件的最后一行上增加如下一行:
    log4j.appender.dest1.layout.ConversionPattern=%-5p: %m%n
    這一行覆蓋了默認的消息輸出格式%m%n,%p指定的是打印消息的層次(info,debug...,其中-5指定的是五個字符的寬度,-指定的是左對齊),%m指定的是消息的內容,%n指定的則是操作系統平臺上的換行符.
    當作完這些工作后,無須重新編譯TestLogging.java,再次運用TestLogg,會得到以下不出的輸出結果:
    DEBUG: Start of main()
    INFO : Just testing a log message with priority set to INFO
    WARN : Just testing a log message with priority set to WARN
    ERROR: Just testing a log message with priority set to ERROR
    FATAL: Just testing a log message with priority set to FATAL
    DEBUG: Calling init()
    INFO : ***System Environment As Seen By Java***
    DEBUG: ***Format: PROPERTY = VALUE***
    INFO : java.runtime.name = Java(TM) 2 Runtime Environment, Standard Edition
    INFO : sun.boot.library.path = c:\jdk1.3\jre\bin
    INFO : java.vm.version = 1.3.0_02
    INFO : java.vm.vendor = Sun Microsystems Inc.
    ... and so on

    如果不想輸出日志的DEBUG與INFO消息,那么可以修改"log4j.rotCategory=DEBUG,dest1"為:
    log4j.rootCategory=WARN,dest1
    該行文件告訴Log4j跳過層次低于WARN的消息輸出,也就是說如DEBUG,INFO層次的消息將不會產生輸出,再次運行TestLogging.class,得到以下結果:
    ####################
    WARN : Just testing a log message with priority set to WARN
    ERROR: Just testing a log message with priority set to ERROR
    FATAL: Just testing a log message with priority set to FATAL
    ####################

    第二部分 Log4j 詳解
    Log4j有三個主要的組件:category ,附件器和布局。
    在程序中,你可以初始化一個category 并且調用它的各種日志方法來將消息字符串記錄到日志中。
    一個category可以被配置用來輸出到多個目標,這些日志目標在Log4j框架中被稱為附件器,這些附件器可以包括控制臺、文本文件、HTML文件、 XML文件甚至是Windows平的事件日志系統,甚至可以被作為郵件被發送。而這些所有的目標都是通過log4j.properties文件來進行配置,對于使用Log4j框架的程序來講只是簡單地調用類似于info()、debug()等的方法。
    附件器類可以是ConsoleAppender, FileAppender, SMTPAppender, SocketAppender, NTEventLogAppender, SyslogAppender, JMSAppender, AsyncAppender 和 NullAppender等。 附件器類可以使用布局(layout)來在發送消息到目標之前進行格式化。例如HTMLLayout將會把消息格式化為HTML 格式。
    除了可以記錄消息字符串到日志文件之外,同時還可以記錄日期、時間、消息層次、類名、源代碼的行數、方法名稱、線程名稱以及其它信息,而具體的輸出需要由附件器的布局管理器來配置。
    category的名字是大小寫區分以"."分隔的一個字符串。一般情況下我們通常使用your_class_name.class.getName()來獲得一個JAVA類名來作為category的名字,例如testproj.util.test。
    Each word in the category name is said to be an ancestor of the subsequent words and a parent of the immediately following word. This is important because Log4j has this concept of inheriting priorities and appenders from ancestors until overridden in a particular category.
    有一個沒有名稱的category叫root,它就像xml的document元素,是所有category的祖先。
    可以使用以下代碼來初始一個根category或指定的category。
    ################
    Category cat = Category.getRoot();
    Category cat2 = Category.getInstance("your.category.name");
    ###################
    代表層次的常量由高到次是FATAL、ERROR、WARN、INFO和DEBUG,可以在log4j.properties中指定category所屬的層次,例如指定log4j.rootCategory=WARN,simple則意味調用root這個category的程序只會記錄WARN及 WARN以上的消息。如果沒有為一個category指定默認的category,那么category將會從其父category來繼承。
    常見的Category類的日志方法有:
    public void log(Priority p, Object message);

    // Convenient shortcuts to the generic logging method
    public void debug(Object message);
    public void info(Object message);
    public void warn(Object message);
    public void error(Object message);
    public void fatal(Object message);

    log4j 只記錄層次與預設層次相等或更高級別的消息,如以下代碼:
    Category cat = Category.getRoot();
    cat.setPriority(Priority.ERROR);//設置預設層次為ERROR級
    // Later...
    //cat.info("Started processing..."); //這條消息將不會輸出,ERROR
    cat.error("User input is erroneous!"); //消息輸出,層次相等
    cat.fatal("Cannot process user input. Program terminated!"); //消息輸出,層次高于預設層次

    第三部分 Log4j 配置
    所有的配置工作應該在log4j.properties文件中完成,而該文件一般須放在應用程序的相同的目錄中。
    在日志系統使用之前,我們必須首先配置log4j.配置log4j意味著增加附件器到Category并且為每一個Category設置一個Layout。
    category之間是有繼承關系,但他們增加到log4j.properties文件中的順序是不固定的。
    示例一:
    #############################################################
    # 設置log4j的根category所使用的預設層次是DEBUG,而只使用A1這個附件器.
    log4j.rootCategory=DEBUG, A1
    #附件器A1被設置為控制臺附件器。
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    #附件器使用的布局是PatternLayout,即模式布局
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    #附件器A1的模式是%-4r [%t] %-5p %c %x - %m%n,其中%m代表消息字符串,%n代表換行符,其它以%開頭的字符代表的含義如下文。
    log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
    #################################################################
    示例二:
    #########################################################
    #### Use two appenders, one to log to console, another to log to a file
    log4j.rootCategory=debug, stdout, R
    # Print only messages of priority WARN or higher for your category
    log4j.category.your.category.name=WARN
    # Specifically inherit the priority level
    #log4j.category.your.category.name=INHERITED
    #### First appender writes to console
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    # Pattern to output the caller's file name and line number.
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
    #### Second appender writes to a file
    log4j.appender.R=org.apache.log4j.RollingFileAppender
    log4j.appender.R.File=example.log
    # Control the maximum log file size
    log4j.appender.R.MaxFileSize=100KB
    # Archive log files (one backup file here)
    log4j.appender.R.MaxBackupIndex=1
    log4j.appender.R.layout=org.apache.log4j.PatternLayout
    log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
    ########################################################

    第四部分 Log4j中有用的Layout
    一些有用的layout有TTCCLayout, HTMLLayout, PatternLayout, SimpleLayout 和 XMLLayout.
    其中SimpleLayout和PatternLayout忽略JAVA throwable 接口派生出來的errors和Exceptions.HTMLLayout和XMLLayout處理這些異常。
    SimpleLayout的輸出中包含日志消息的層次,緊跟著“-”后面的日志消息字符串。例如:
    DEBUG - Hello World Message
    Patternlayout 可以根據輸出的模式字符串來決定消息的輸出,模式字符串類似于C語言中的模式字符串。例如PatternLayout中如果使用模式字符串“%r [%t] %-5p %c -%m%n”會輸出以下消息:
    176 [main] INFO org.foo.Bar -Located nearest gas station
    以下對各域作一下解釋:
    1)%r輸出程序開始執行之后的微秒數
    2)%t輸出當前線程的名稱
    3)%-5p輸出消息的層次。
    4)%c 輸出category的名稱
    5)-%m及s是日志消息本身,%n是換行符。
    當前在模式字符串中你可以嵌入任何想要輸出的字符。
    模式字符串中的模式如下:
    %m:消息本身
    %p:消息的層次
    %r:從程序開始執行到當前日志產生時的時間間隔(微秒)
    %c:輸出當前日志動作所在的category名稱。例如:如果category名稱是"a.b.c","%c{2}"將會輸出"b.c". {2}意謂著輸出“以點分隔開的category名稱的后兩個組件”,如果 {n}沒有,將會輸出整個category名稱.
    %t:輸出當前線程的名稱
    %x:輸出和當前線程相關聯的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字符,就從左邊交遠銷出的字符截掉。
    4)%20.30c:



    第五部分 Log4j中附件器及相關的鍵值參數
    1.ConsoleAppender選項
    Threshold=WARN:指定日志消息的輸出最低層次。
    ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
    Target=System.err:默認情況下是:System.out,指定輸出控制臺
    2.FileAppender 選項
    Threshold=WARN:指定日志消息的輸出最低層次。
    ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
    File=mylog.txt:指定消息輸出到mylog.txt文件。
    Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
    3.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:指定可以產生的滾動文件的最大數。
    4.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: 每分鐘
    5.PatternLayout 選項
    ConversionPattern=%m%n :指定怎樣格式化指定的消息。
    6.HTMLLayout 選項
    LocationInfo=true:默認值是false,輸出java文件名稱和行號
    Title=my app file: 默認值是 Log4J Log Messages.
    7.XMLLayout 選項
    LocationInfo=true:默認值是false,輸出java文件和行號

    第六部分 Log4j配置案例解析
    #log4j.debug=true
    #log4j.disable=fatal
    #log4j.additivity.TestLogging=false

    log4j.rootCategory=, dest1
    log4j.category.TestLogging=DEBUG, dest1
    log4j.appender.dest1=org.apache.log4j.ConsoleAppender
    #log4j.appender.dest1.layout=org.apache.log4j.SimpleLayout
    log4j.appender.dest1.layout=org.apache.log4j.PatternLayout
    #log4j.appender.dest1.layout.ConversionPattern=%-5p %l %x: %m%n


    !----------------------####### END OF PROPERTIES #######----------------------!


    ##############################################################
    # Below I document in more detail how to write a log4j configuration file. #
    # SELECTIVELY copy lines beginning with #, paste and uncomment them above. #
    ##############################################################

    !-----------------------------------------------------------------------------!
    ! PLACE THIS FILE ANYWHERE IN CLASSPATH !
    ! Appenders are additive by default. !
    ! Priorities are inherited until overridden in a category. !
    ! In ${property_key}, the value of the key can be defined as a system !
    ! property or in this file itself. System properties are searched first and !
    ! then this file. !
    !-----------------------------------------------------------------------------!



    !-----------------------------------------------------------------------------!
    ! Configure log4j's operation at the meta level !
    !-----------------------------------------------------------------------------!
    ! Observe log4j parsing this file
    #log4j.debug=true
    ! Set this to false for log4j to actually obey the log4j.disable property(next)
    #log4j.disableOverride=false
    ! Disable all logging in all categories for messages with priority equal to
    ! or lower than the one given here
    #log4j.disable=INFO



    !-----------------------------------------------------------------------------!
    ! Configure categories (loggers) !
    !-----------------------------------------------------------------------------!

    ! ROOT CATEGORY (Usually sufficient to set this one only)
    ! Here, logs messages with priority DEBUG (default) or higher
    #log4j.rootCategory=, dest1
    ! Or,
    #log4j.rootCategory=debug, dest1, dest2

    ! YOUR CATEGORIES (to customize logging per class/pkg/project/etc)
    ! Here, overrides ancestor's priority and makes it WARN or higher for this cat.
    #log4j.category.TestLogging=WARN, dest3
    ! Or,
    #log4j.category.TestLogging=DEBUG, dest3

    !--------DON'T DO THIS!!! APPENDERS ARE ADDITIVE BY DEFAULT!!!----!
    ! It will write the same log message TWICE to dest1. Once for root, then for !
    ! this category. !
    !#log4j.category.TestLogging=DEBUG, dest1, dest3 !
    ! If you DO NOT want additivity for this category, say so !
    !#log4j.additivity.TestLogging=false !
    !-----------------------------------------------------------------------------!



    !-----------------------------------------------------------------------------!
    ! Configure appenders (log destinations/targets) and their options !
    !-----------------------------------------------------------------------------!

    ! WRITE TO CONSOLE (stdout or stderr)
    #log4j.appender.dest1=org.apache.log4j.ConsoleAppender
    #log4j.appender.dest1.ImmediateFlush=true

    ! WRITE LOG TO A FILE, ROLL THE FILE AFTER SOME SIZE
    #log4j.appender.dest2=org.apache.log4j.RollingFileAppender
    ! This appender will only log messages with priority equal to or higher than
    ! the one specified here
    #log4j.appender.dest2.Threshold=ERROR
    ! Specify the file name (${property_key} gets substituted with its value)
    #log4j.appender.dest2.File=${java.home}/log4j.log
    ! Don't append, overwrite
    #log4j.appender.dest2.Append=false
    ! Control the maximum log file size
    #log4j.appender.dest2.MaxFileSize=100KB
    ! Keep backup file(s) (backups will be in filename.1, .2 etc.)
    #log4j.appender.dest2.MaxBackupIndex=2

    ! WRITE LOG TO A FILE, ROLL THE FILE EVERY WEEK
    #log4j.appender.dest3=org.apache.log4j.DailyRollingFileAppender
    ! Specify the file name
    #log4j.appender.dest3.File=log4TestLogging2.html
    ! Control the maximum log file size
    #log4j.appender.dest3.MaxFileSize=300KB
    ! Rollover log file at the start of each week
    #log4j.appender.dest3.DatePattern='.'yyyy-ww



    !-----------------------------------------------------------------------------!
    ! Configure appender layouts (log formats) and their options !
    !-----------------------------------------------------------------------------!

    ! USE SIMPLE LOG FORMAT (e.g. INFO - your log message)
    #log4j.appender.dest1.layout=org.apache.log4j.SimpleLayout

    ! USE A C PRINTF STYLE PATTERN TO FORMAT LOG MESSAGE
    #log4j.appender.dest1.layout=org.apache.log4j.PatternLayout
    ! For a pattern layout, specify the pattern (Default is %m%n which is fastest)
    #log4j.appender.dest1.layout.ConversionPattern=%-5p: %m%n
    ! Or,
    #log4j.appender.dest1.layout.ConversionPattern=%-5p %6.10r[%t]%x(%F:%L) - %m%n

    #log4j.appender.dest2.layout=org.apache.log4j.PatternLayout
    #log4j.appender.dest2.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x(%F:%L) - %m%n
    ! Or, (the pattern below will slow down your app)
    #log4j.appender.dest2.layout.ConversionPattern=[%d{yyyy-mm-dd hh:mm},%6.6r]%-5p[%t]%x(%F:%L) - %m%n


    ! FORMAT LOG MESSAGES IN THE FORM OF AN HTML TABLE
    #log4j.appender.dest3.layout=org.apache.log4j.HTMLLayout
    ! Include Java file name and line number (Default is false)
    #log4j.appender.dest3.layout.LocationInfo=true
    ! Set
    posted on 2007-10-18 09:39 Endless 閱讀(376) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 精品亚洲AV无码一区二区 | 亚洲一区二区三区免费视频| 亚洲国产天堂久久久久久| 香蕉视频亚洲一级| 日日AV拍夜夜添久久免费| 国产精品自拍亚洲| 四虎影视精品永久免费网站| 美女露隐私全部免费直播| 四虎免费久久影院| 三年片在线观看免费观看大全中国| 亚洲av无码天堂一区二区三区| 日韩久久无码免费毛片软件| 亚洲精品视频在线观看你懂的| 国产在线观看免费av站| 久久亚洲AV午夜福利精品一区| 一级毛片aaaaaa免费看| 亚洲成人免费网站| 成人免费网站在线观看| 妇女自拍偷自拍亚洲精品| 国产亚洲精品无码专区| 在线看片免费人成视频久网下载| 亚洲成AV人在线观看天堂无码| 久久久久高潮毛片免费全部播放| 亚洲日韩国产精品无码av| 成人免费视频88| 国产精品免费久久久久电影网| 亚洲av日韩av天堂影片精品| 国产福利视精品永久免费| 亚洲爆乳AAA无码专区| 亚洲日韩在线中文字幕第一页 | 日日夜夜精品免费视频| 日韩久久无码免费毛片软件| 亚洲一区影音先锋色资源| 99视频在线精品免费观看6| 色哟哟国产精品免费观看| 亚洲AV无码不卡在线播放| 黑人粗长大战亚洲女2021国产精品成人免费视频| 久久久久亚洲精品无码网址色欲 | 69视频在线观看免费| 亚洲国产高清国产拍精品| 国产aⅴ无码专区亚洲av|