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

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

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

    posts - 64,comments - 22,trackbacks - 0
    1. 簡介
    2. 安裝
    3. log4j基本概念
    3.1. Logger
    3.2. Appender
    3.2.1. 使用ConsoleAppender
    3.2.2. 使用FileAppender
    3.2.3. 使用WriterAppender
    3.3. Layout
    3.4. 基本示例
    3.4.1. SimpleLayout和FileAppender
    3.4.2. HTMLLayout和WriterAppender
    3.4.3. PatternLayout和ConsoleAppender
    4. 使用外部配置文件
    5. 參考資料 (以及一些有參考價值的鏈接)

    程序開發環境中的日志記錄是由嵌入在程序中以輸出一些對開發人員有用信息的語句所組成。例如,跟蹤語句(trace),結構轉儲和常見的 System.out.println或printf調試語句。log4j提供分級方法在程序中嵌入日志記錄語句。日志信息具有多種輸出格式和多個輸出級別。

    使用一個專門的日志記錄包,可以減輕對成千上萬的System.out.println語句的維護成本,因為日志記錄可以通過配置腳本在運行時得以控制。 log4j維護嵌入在程序代碼中的日志記錄語句。通過規范日志記錄的處理過程,一些人認為應該鼓勵更多的使用日志記錄并且獲得更高程度的效率。

    為了使用我們即將要安裝的日志記錄工具,還必須要設置操作環境,只有這樣,工具才能知道從哪里找到它所需要的信息,并且操作系統知道從哪里找到這個工具。那么,怎樣做呢?實際上,它要求更改操作環境。

    1. 從 http://jakarta.apache.org/log4j/docs/download.html下載log4j發行版。

    2. 解壓存檔文件到合適的目錄中。

    3. 添加文件 dist/lib/log4j-1.2.6.jar 到 CLASSPATH 環境變量中。

    使用log4j大概涉及3個主要概念:

    1. 公共類 Logger

      Logger 負責處理日志記錄的大部分操作。

    2. 公共接口 Appender

      Appender 負責控制日志記錄操作的輸出。

    3. 公共抽象類Layout

      Layout 負責格式化Appender的輸出。

    日志記錄器(Logger)是日志處理的核心組件。log4j具有5種正常級別(Level)。 日志記錄器(Logger)的可用級別Level (不包括自定義級別 Level), 以下內容就是摘自log4j API (http://jakarta.apache.org/log4j/docs/api/index.html):

    • static Level DEBUG

      DEBUG Level指出細粒度信息事件對調試應用程序是非常有幫助的。

    • static Level INFO

      INFO level表明 消息在粗粒度級別上突出強調應用程序的運行過程。

    • static Level WARN

      WARN level表明會出現潛在錯誤的情形。

    • static Level ERROR

      ERROR level指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。

    • static Level FATAL

      FATAL level指出每個嚴重的錯誤事件將會導致應用程序的退出。

    另外,還有兩個可用的特別的日志記錄級別: (以下描述來自log4j APIhttp://jakarta.apache.org/log4j/docs/api/index.html):

    • static Level ALL

      ALL Level是最低等級的,用于打開所有日志記錄。

    • static Level OFF

      OFF Level是最高等級的,用于關閉所有日志記錄。

    日志記錄器(Logger)的行為是分等級的。

    有很多方法可以創建一個日志記錄器(Logger),下面方法可以取回root日志記錄器:

    Logger logger = Logger.getRootLogger();

    還可以這樣創建一個新的日志記錄器:

    Logger logger = Logger.getLogger("MyLogger");

    比較常用的用法,就是根據類名實例化一個靜態的全局日志記錄器:

    static Logger logger = Logger.getLogger(test.class);

    所有這些創建的叫"logger"的日志記錄器都可以用下面方法設置級別:

    logger.setLevel((Level)Level.WARN);

    可以使用7個級別中的任何一個; Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR, Level.FATAL, Level.ALL and Level.OFF.

    Appender 控制日志怎樣輸出。下面列出一些可用的Appender(log4j API中所描述的http://jakarta.apache.org/log4j/docs/api/index.html):

    1. ConsoleAppender:使用用戶指定的布局(layout) 輸出日志事件到System.out或者 System.err。默認的目標是System.out。

    2. DailyRollingFileAppender 擴展FileAppender,因此多個日志文件可以以一個用戶選定的頻率進行循環日志記錄。

    3. FileAppender 把日志事件寫入一個文件

    4. RollingFileAppender 擴展FileAppender備份容量達到一定大小的日志文件。

    5. WriterAppender根據用戶的選擇把日志事件寫入到Writer或者OutputStream。

    6. SMTPAppender 當特定的日志事件發生時,一般是指發生錯誤或者重大錯誤時,發送一封郵件。

    7. SocketAppender 給遠程日志服務器(通常是網絡套接字節點)發送日志事件(LoggingEvent)對象。

    8. SocketHubAppender 給遠程日志服務器群組(通常是網絡套接字節點)發送日志事件(LoggingEvent)對象。

    9. SyslogAppender給遠程異步日志記錄的后臺精靈程序(daemon)發送消息。

    10. TelnetAppender 一個專用于向只讀網絡套接字發送消息的log4j appender。

    還可以實現 Appender 接口,創建以自己的方式進行日志輸出的Appender。

    FileAppender可以用這種方式創建:

    FileAppender appender = null;
    try {
    appender = new FileAppender(new PatternLayout(),"filename");
    } catch(Exception e) {}

    上面用到的構造函數:

    FileAppender(Layout layout, String filename)
    實例化一個FileAppender并且打開變量"filename"指定的文件。

    另一個有用的構造函數是:

    FileAppender(Layout layout, String filename, boolean append)
    實例化一個FileAppender并且打開變量"filename"指定的文件。

    這個構造函數還可以選擇是否對指定的文件進行追加的方式輸出。如果沒有指定值,那么默認的方式就是追加。

    Appender必須使用一個與之相關聯的 Layout,這樣它才能知道怎樣格式化它的輸出。當前,log4j具有三種類型的Layout:

    這里是一個非常簡單的例子,程序實現了SimpleLayout和FileAppender:

    import org.apache.log4j.Level;
    import org.apache.log4j.Logger;
    import org.apache.log4j.SimpleLayout;
    import org.apache.log4j.FileAppender;
    public class simpandfile {
    static Logger logger = Logger.getLogger(simpandfile.class);
    public static void main(String args[]) {
    SimpleLayout layout = new SimpleLayout();
    FileAppender appender = null;
    try {
    appender = new FileAppender(layout,"output1.txt",false);
    } catch(Exception e) {}
    logger.addAppender(appender);
    logger.setLevel((Level) Level.DEBUG);
    logger.debug("Here is some DEBUG");
    logger.info("Here is some INFO");
    logger.warn("Here is some WARN");
    logger.error("Here is some ERROR");
    logger.fatal("Here is some FATAL");
    }
    }

    你可以下載: simpandfile.java。 還可以查看它的輸出: output1.txt.

    這里是一個非常簡單的例子,程序實現了 HTMLLayout和WriterAppender:

    import java.io.*;
    import org.apache.log4j.Level;
    import org.apache.log4j.Logger;
    import org.apache.log4j.HTMLLayout;
    import org.apache.log4j.WriterAppender;
    public class htmlandwrite {
    static Logger logger = Logger.getLogger(htmlandwrite.class);
    public static void main(String args[]) {
    HTMLLayout layout = new HTMLLayout();
    WriterAppender appender = null;
    try {
    FileOutputStream output = new FileOutputStream("output2.html");
    appender = new WriterAppender(layout,output);
    } catch(Exception e) {}
    logger.addAppender(appender);
    logger.setLevel((Level) Level.DEBUG);
    logger.debug("Here is some DEBUG");
    logger.info("Here is some INFO");
    logger.warn("Here is some WARN");
    logger.error("Here is some ERROR");
    logger.fatal("Here is some FATAL");
    }
    }

    你可以下載: simpandfile.java. 還可以查看它的輸出:output1.txt.

    這里是一個非常簡單的例子,程序實現了PatternLayout和ConsoleAppender:

    import org.apache.log4j.Level;
    import org.apache.log4j.Logger;
    import org.apache.log4j.PatternLayout;
    import org.apache.log4j.ConsoleAppender;
    public class consandpatt {
    static Logger logger = Logger.getLogger(consandpatt.class);
    public static void main(String args[]) {
    // Note, %n is newline
    String pattern = "Milliseconds since program start: %r %n";
    pattern += "Classname of caller: %C %n";
    pattern += "Date in ISO8601 format: %d{ISO8601} %n";
    pattern += "Location of log event: %l %n";
    pattern += "Message: %m %n %n";
    PatternLayout layout = new PatternLayout(pattern);
    ConsoleAppender appender = new ConsoleAppender(layout);
    logger.addAppender(appender);
    logger.setLevel((Level) Level.DEBUG);
    logger.debug("Here is some DEBUG");
    logger.info("Here is some INFO");
    logger.warn("Here is some WARN");
    logger.error("Here is some ERROR");
    logger.fatal("Here is some FATAL");
    }
    }

    你可以下載:simpandfile.java. 還可以查看它的輸出: output2.txt.

    Log4j經常與外部日志文件聯合使用,這樣很多可選項不必硬編碼在軟件中。使用外部配置文件的優點就是修改可選項不需要重新編譯程序。唯一的缺點就是,由于用到io 指令,速度稍微有些減慢。

    有兩個方法可以用來指定外部配置文件:文本文件或者XML文件。既然現在所有事情都寫成XML文件,那么該教程就重點講解XML文件方法,但是也包含相關文本文件的例子。首先,看看下面的XML配置文件示例:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.SimpleLayout"/>
    </appender>
    <root>
    <priority value ="debug" />
    <appender-ref ref="ConsoleAppender"/>
    </root>
    </log4j:configuration>

    文件以標準的XML聲明作為開始,后面跟著指出DTD(文檔類型定義)的DOCTYPE聲明,它定義了XML文件的結構,例如,什么元素可以嵌入在其他元素中等等。上面文件在log4j發行版的src/java/org/apache/log4j/xml目錄中。 接著看看封裝所有元素的 log4j:configuration 元素,它在DOCTYPE聲明中被指定為根元素。嵌入在根元素中有兩個結構:

    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.SimpleLayout"/>
    </appender>

    這里創建一個名叫"ConsoleAppender"的 Appender,注意,你可以選擇任何名字,該示例之所以選擇"ConsoleAppender",完全是為了示例的設計。接著這個appender類以全名形式給出,經常用規范(fully qualified)類名。 Appender必須具有一個指定的 nameclass。嵌入在 Appender之內的是 layout元素,這里它被指定為SimpleLayout。 Layout 必須具有一個 class屬性。

    <root>
    <priority value ="debug" />
    <appender-ref ref="ConsoleAppender"/>
    </root>

    root元素必須存在且不能被子類化。示例中的優先級被設置為"debug",設置appender飽含一個appender-ref元素。還有更多的屬性或元素可以指定。查看log4j發行版中的src/java/org/apache/log4j/xml/log4j.dtd以了解關于XML配置文件結構的更多信息??梢杂孟旅孢@種方法把配置信息文件讀入到Java程序中:

    DOMConfigurator.configure("configurationfile.xml");

    DOMConfigurator 用一棵DOM樹來初始化log4j環境。這里是示例中的XML配置文件:plainlog4jconfig.xml。這里是執行該配置文件的程序: files/externalxmltest.java:

    import org.apache.log4j.Logger;
    import org.apache.log4j.xml.DOMConfigurator;
    public class externalxmltest {
    static Logger logger = Logger.getLogger(filetest.class);
    public static void main(String args[]) {
    DOMConfigurator.configure("xmllog4jconfig.xml");
    logger.debug("Here is some DEBUG");
    logger.info("Here is some INFO");
    logger.warn("Here is some WARN");
    logger.error("Here is some ERROR");
    logger.fatal("Here is some FATAL");
    }
    }

    這里是一個實現帶有PatternLayoutFileAppender的日志記錄器Logger的XML配置文件:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="appender" class="org.apache.log4j.FileAppender">
    <param name="File" value="Indentify-Log.txt"/>
    <param name="Append" value="false"/>
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
    </layout>
    </appender>
    <root>
    <priority value ="debug"/>
    <appender-ref ref="appender"/>
    </root>
    </log4j:configuration>

    你可以從這里下載示例: xmllog4jconfig2.xml。 想要得到更多的使用XML文件配置log4j環境的例子,請查看log4j發行版的目錄src/java/org/apache/log4j/xml/examples/ 。

    這就是上面討論的文本文件形式的配置文件:

    # initialise root logger with level DEBUG and call it BLAHlog4j.rootLogger=DEBUG,
    BLAH# add a ConsoleAppender to the logger BLAHlog4j.appender.BLAH=
    org.apache.log4j.ConsoleAppender# set set that layout to be SimpleLayoutlog4j.appender.BLAH.layout=
    org.apache.log4j.SimpleLayout

    從這里可以下載: plainlog4jconfig.txt。這就是執行該配置文件的程序:

    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;
    public class externalplaintest {
    static Logger logger = Logger.getLogger(externalplaintest.class);
    public static void main(String args[]) {
    PropertyConfigurator.configure("plainlog4jconfig.xml");
    logger.debug("Here is some DEBUG");
    logger.info("Here is some INFO");
    logger.warn("Here is some WARN");
    logger.error("Here is some ERROR");
    logger.fatal("Here is some FATAL");
    }
    }

    你可以下載使用該配置文件的示例: externalplaintest.java。想要獲得更多的使用文本文件配置log4j環境的例子,請查看log4j發行版中的目錄examples

    使用外部配置文件的例子就簡單的討論到這里,現在應該可以肯定你已經有能力獨立學習更多的log4j發行版和測試版中提供的例子。

    posted on 2011-11-30 11:36 hellxoul 閱讀(16824) 評論(5)  編輯  收藏

    FeedBack:
    # re: log4j教程
    2013-03-27 09:19 | welody
    非常感謝你的分享??!謝謝。  回復  更多評論
      
    # re: log4j教程
    2013-09-05 14:06 | 馬金帥
    寫的太好了非常感謝你,讓我在短時間內對log4j有了比較全面的了解,您辛苦了。  回復  更多評論
      
    # re: log4j教程[未登錄]
    2014-01-07 15:18 | jet
    it's very helpful, thanks a lot for sharing  回復  更多評論
      
    # re: log4j教程
    2014-09-19 22:23 | zuidaima
    log4j demo教程源代碼下載:http://zuidaima.com/share/klog4j-p1-s1.htm  回復  更多評論
      
    # re: log4j教程
    2014-10-28 14:12 | 波哥哥
    這個教程太好了!謝謝  回復  更多評論
      

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


    網站導航:
     
    主站蜘蛛池模板: 99久久99久久精品免费观看| 四虎永久在线精品免费网址| 亚洲国产精品张柏芝在线观看| 美女视频黄的全免费视频 | 亚洲va无码va在线va天堂| 亚洲免费精彩视频在线观看| 亚洲最大天堂无码精品区| 久久精品国产精品亚洲人人| AV大片在线无码永久免费| 九九免费观看全部免费视频| 亚洲综合综合在线| 亚洲国产精品成人一区| 国产免费不卡视频| eeuss草民免费| 亚洲免费中文字幕| 亚洲区小说区激情区图片区| 欧美日韩国产免费一区二区三区| 国产日韩在线视频免费播放| 亚洲最大福利视频| 久久亚洲免费视频| 全黄a免费一级毛片人人爱| 无码国产精品一区二区免费| 福利免费在线观看| 亚洲av色香蕉一区二区三区| 亚洲综合精品香蕉久久网97| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 亚洲精华液一二三产区| 亚洲AV无码国产精品色午友在线 | 两性色午夜视频免费网| 亚洲码和欧洲码一码二码三码| 亚洲日本一区二区| 久久精品国产亚洲精品| 四虎永久成人免费影院域名| 国产免费女女脚奴视频网| a毛片免费观看完整| 一区二区三区免费电影| 在线亚洲精品视频| 亚洲av无码一区二区三区在线播放 | 搜日本一区二区三区免费高清视频| 亚洲人成免费电影| 久久精品国产亚洲av影院|