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

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

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

    kapok

    垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks

    The use of log4j revolves around 3 main things:

    1. public class Logger

      Logger is responsible for handling the majority of log operations.

    2. public interface Appender

      Appender is responsible for controlling the output of log operations.

    3. public abstract class Layout

      Layout is responsible for formatting the output for Appender.

    The logger is the core component of the logging process. In log4j, there are 5 normal levels Levels of logger available (not including custom Levels), the following is borrowed from the log4j API (http://jakarta.apache.org/log4j/docs/api/index.html):

    • static Level DEBUG

      The DEBUG Level designates fine-grained informational events that are most useful to debug an application.

    • static Level INFO

      The INFO level designates informational messages that highlight the progress of the application at coarse-grained level.

    • static Level WARN

      The WARN level designates potentially harmful situations.

    • static Level ERROR

      The ERROR level designates error events that might still allow the application to continue running.

    • static Level FATAL

      The FATAL level designates very severe error events that will presumably lead the application to abort.

    In addition, there are two special levels of logging available: (descriptions borrowed from the log4j API http://jakarta.apache.org/log4j/docs/api/index.html):

    • static Level ALL

      The ALL Level has the lowest possible rank and is intended to turn on all logging.

    • static Level OFF

      The OFF Level has the highest possible rank and is intended to turn off logging.

    The behaviour of loggers is hierarchical. The following table illustrates this:

    A logger will only output messages that are of a level greater than or equal to it. If the level of a logger is not set it will inherit the level of the closest ancestor. So if a logger is created in the package com.foo.bar and no level is set for it, it will inherit the level of the logger created in com.foo. If no logger was created in com.foo, the logger created in com.foo.bar will inherit the level of the root logger, the root logger is always instantiated and available, the root logger is assigned the level DEBUG.

    There are a number of ways to create a logger, one can retrieve the root logger:

    Logger logger = Logger.getRootLogger();

    One can create a new logger:

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

    More usually, one instantiates a static logger globally, based on the name of the class:

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

    All these create a logger called "logger", one can set the level with:

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

    You can use any of 7 levels; Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR, Level.FATAL, Level.ALL and Level.OFF.

    The Appender controls how the logging is output. The Appenders available are (descriptions borrowed from the log4j API http://jakarta.apache.org/log4j/docs/api/index.html):

    1. ConsoleAppender: appends log events to System.out or System.err using a layout specified by the user. The default target is System.out.

    2. DailyRollingFileAppender extends FileAppender so that the underlying file is rolled over at a user chosen frequency.

    3. FileAppender appends log events to a file.

    4. RollingFileAppender extends FileAppender to backup the log files when they reach a certain size.

    5. WriterAppender appends log events to a Writer or an OutputStream depending on the user's choice.

    6. SMTPAppender sends an e-mail when a specific logging event occurs, typically on errors or fatal errors.

    7. SocketAppender sends LoggingEvent objects to a remote a log server, usually a SocketNode.

    8. SocketHubAppender sends LoggingEvent objects to a set of remote log servers, usually a SocketNodes

    9. SyslogAppendersends messages to a remote syslog daemon.

    10. TelnetAppender is a log4j appender that specializes in writing to a read-only socket.

    One may also implement the Appender interface to create ones own ways of outputting log statements.

    Log4j is usually used in conjunction with external configuration files so that options do not have to be hard-coded within the software. The advantage of using an external configuration file is that changes can be made to the options without having to recompile the software. A disadvantage could be, that due to the io instructions used, it is slightly slower.

    There are two ways in which one can specify the external configuration file: a plain text file or an XML file. Since everything is written in XML these days, this tutorial will focus on the XML approach but will also include relevant plain text examples. To begin with, examine the sample XML config file shown below:

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

    The file starts with a standard XML declaration followed by a DOCTYPE declaration which indicates the DTD(Document Type Definition), this defines the structure of the XML file, what elements may be nested within other elements etc. This file is provided in the log4j distribution under src/java/org/apache/log4j/xml. Next comes the all-encapsulating log4j:configuration element, which was specified as the root element in the DOCTYPE declaration. Nested within the root element are two structures:

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

    Here an Appender is created and called "ConsoleAppender", note that any name could have been chosen, it is because of the contrivity of examples that this name was chosen. The class for the appender is then specified in full, when referring to classes, one always uses the fully qualified class name. An Appender must always have a name and a class specified. Nested within Appender is the layout element which defines the layout to be a SimpleLayout. Layout must always have the class attribute.

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

    The root element always exists and cannot be sub-classed. The example shows the priority being set to "debug" and the appender setup by including an appender-ref element, of which, more that one may be specified. See the file src/java/org/apache/log4j/xml/log4j.dtd in your log4j distribution for more information about the structure of an XML configuration file. The configuration file is pulled into the Java program like this:

    DOMConfigurator.configure("configurationfile.xml");
        

    The DOMConfigurator is used to initialise the log4j environment using a DOM tree. Here is the example xml configuration file: plainlog4jconfig.xml. Here is a program which implements this configuration file: files/externalxmltest.java:

    import org.apache.log4j.Logger;
    import org.apache.log4j.xml.DOMConfigurator;
    public class externalxmltest {
       static Logger logger = Logger.getLogger(externalxmltest.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");
       }
    }
        

    Here is an XML configuration file for a Logger implementing a FileAppender using a PatternLayout:

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

    You can download this example from here: xmllog4jconfig2.xml. For more examples of using xml files to configure a log4j environment, see the src/java/org/apache/log4j/xml/examples/ directory in the log4j distribution.

    Here is the configuration file discussed above, expressed in the form of a plain text file:

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

    You can download it here: plainlog4jconfig.txt. Here is a program implementing this:

    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");
       }
    }
        

    You can download an example program that uses this configuration file here: files/externalplaintest.java. For more examples of using plain text files to configure a log4j environment, see the examples directory in the log4j distribution.

    The use of external example files has only been briefly discussed here, it is assumed that you have the capacity to learn more by yourself by studying the examples provided with the log4j distribution and experimenting.

    posted on 2005-09-07 00:03 笨笨 閱讀(2629) 評論(1)  編輯  收藏 所屬分類: J2EEALL

    評論

    # re: Log4J review 2005-11-06 15:16 jiniboy
    給個鏈接不久行了嗎  回復  更多評論
      

    主站蜘蛛池模板: 色天使色婷婷在线影院亚洲 | 亚洲国产成人精品女人久久久 | 一级成人a毛片免费播放| 亚洲国产成人久久综合| 亚洲日韩国产精品无码av| 中文字幕亚洲一区二区va在线| 性做久久久久久久免费看| 久久精品国产这里是免费| 一个人看的hd免费视频| 国产偷国产偷亚洲清高APP| 亚洲人成人77777网站不卡| 亚洲精品成人av在线| 国产亚洲情侣一区二区无码AV| 拔擦拔擦8x华人免费久久| 最新欧洲大片免费在线| 97久久免费视频| 亚洲精品免费观看| 国内精品久久久久影院免费| 国产精品午夜免费观看网站 | 久久亚洲精品无码观看不卡| 免费国产成人午夜私人影视| 免费看www视频| 午夜免费福利网站| 天天看免费高清影视| 野花高清在线观看免费3中文 | 久久伊人久久亚洲综合| 亚洲人成亚洲人成在线观看| 丝袜熟女国偷自产中文字幕亚洲| 免费国产不卡午夜福在线| 国产一区二区三区免费看| 国产高清在线精品免费软件| 日本大片在线看黄a∨免费| 日韩免费视频播放| 国产一区二区三区无码免费| www.亚洲一区| 亚洲综合伊人久久大杳蕉| 亚洲精品无码av人在线观看| 亚洲AV无码国产精品麻豆天美| 亚洲成av人片天堂网| 337p日本欧洲亚洲大胆精品555588| 亚洲色av性色在线观无码|