隨筆 - 40, 文章 - 0, 評論 - 20, 引用 - 0
          數據加載中……

          精通Log4j

          ?log4j雖然總的來說是比較容易使用的,但是要是想比較精通的操縱它還是有很多地方值得探討的。
          ??? 這幾天有空,把項目中大家用到的log4j實現的功能分了一下類,大致分為下面三類:
          ??? <1>所有的日志信息都輸出到log.log.
          ??? <2>對于一些特殊的日志(如啟動時候的日志),輸出到log/startup/startup.log.
          ??? <3>對于某些特殊包下面的日志,如com.aspire包下面的error信息都輸出到error.log???
          ??? 有了這幾個功能,相信對于大部分的系統都是夠用的了,下面這個例子就是實現了這幾個功能:
          ??? (至于其他的一些配置,如格式這些的就不說明,有很多這種資料)
          ???
          ??? ***********? log4j 配置文件? ************???
          ???
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
          <log4j:configuration xmlns:log4j="

          <appender name="file" class="org.apache.log4j.RollingFileAppender">
          ?<param name="File" value="log.log"/>
          ?<layout class="org.apache.log4j.PatternLayout">
          ?<param name="ConversionPattern" value=" %d{ISO8601} [%c]- %m%n"/>
          ?</layout>
          </appender>

          <appender name="error" class="org.apache.log4j.RollingFileAppender">
          ??<param name="File" value="error.log"/>
          ??<param name="MaxBackupIndex" value="300"/>
          ??<param name="Encoding" value="GB2312"/>
          ??<param name="MaxFileSize" value="20MB"/>
          ??<layout class="org.apache.log4j.PatternLayout">
          ???<param name="ConversionPattern" value="%d{ISO8601} %p [%c] - [%m]%n"/>
          ??</layout>
          ??? <filter class="org.apache.log4j.varia.LevelRangeFilter">
          ??<!-- 過濾,只記錄error信息-->
          ??<param name="LevelMin" value="error"/>
          ??<param name="LevelMax" value="error"/>
          ??<param name="acceptOnMatch" value="true"/>
          ??? </filter>
          </appender>
          <appender name="startup" class="com.aspire.TimeSizeRollingFileAppender">
          ??<!--該類使自己從FileAppender派生,可以自己控制輸出文件的路徑 -->
          ??<param name="File" value="log/startup/startup.log" />
          ??<param name="Encoding" value="GBK" />
          ??<layout class="org.apache.log4j.PatternLayout">
          ???<param name="ConversionPattern" value="%m %d{ISO8601}- %m%n %p %l%n" />
          ??</layout>
          </appender>

          <logger name="biz.startup">
          <!--Logger logger = Logger.getLogger("biz.startup") 可以這樣來調用本logger-->
          ??<level value="debug" />
          ??<appender-ref ref="startup" />
          </logger>

          <logger name="com.aspire" additivity="false">
          <!--Log log = LogFactory.getLog(TestLog4j.class) 此時如果TestLog4j
          ??? 位于com.aspire包下面,那么使用本logger
          ?-->
          ??<level value="debug"/>
          ??<appender-ref ref="error"/>
          </logger>
          <root>
          <level value="info"/>
          <!-- 默認輸出到log.log-->
          <appender-ref ref="file"/>
          </root>
          </log4j:configuration>

          ***********? log4j 配置文件結束 ************

          **********? 派生的TimeSizeRollingFileAppender類*****
          package com.aspire;

          import org.apache.log4j.FileAppender;
          import org.apache.log4j.spi.ErrorCode;
          import java.io.File;
          import java.io.IOException;

          public class TimeSizeRollingFileAppender
          ??? extends FileAppender
          ??? implements ErrorCode {

          ? private final static String FS = System.getProperty("file.separator");
          ? public TimeSizeRollingFileAppender() {
          ? }
          ? public void setFile(String file) {
          ??? String val = file.trim();
          ??? File domain = new File(".");
          ??? try {
          ????? fileName = domain.getCanonicalPath() + FS + val;
          ??? }
          ??? catch (IOException ex) {
          ????? ex.printStackTrace();
          ??? }
          ? }
          }

          ********** TimeSizeRollingFileAppender 類結束 ******

          ************ 調用示例 TestLog4j類 **************
          package com.aspire;

          import org.apache.log4j.Logger;
          import org.apache.log4j.LogManager;
          import org.apache.commons.logging.LogFactory;
          import org.apache.log4j.xml.DOMConfigurator;
          import org.apache.commons.logging.Log;

          public class TestLog4j {
          ? private Logger logger = Logger.getLogger("biz.startup");
          ? private Log log = LogFactory.getLog(TestLog4j.class);

          ? public static void config(){
          ??? DOMConfigurator.configure("conf\\log4jConf.xml");
          ? }
          ? public void Test(){
          ??? /**
          ???? * error > warn > info > debug
          ???? */
          ??? logger.error("*****error*****");
          ??? logger.debug("****debug*****");
          ??? logger.warn("*****warn******");
          ??? logger.info("*****info******");
          ??? log.error("中華之崛起!");
          ? }
          ? public static void main(String [] argv){
          ??? TestLog4j t = new TestLog4j();
          ??? TestLog4j.config();
          ??? t.Test();
          ? }
          }

          ***************? TestLog4j end ***********

          posted on 2006-04-26 12:59 月亮 閱讀(403) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 山东| 聊城市| 大兴区| 勐海县| 溧水县| 广南县| 绿春县| 通辽市| 沁水县| 微博| 临安市| 化隆| 和硕县| 绥阳县| 周口市| 五大连池市| 凤山县| 泗水县| 扎兰屯市| 八宿县| 当雄县| 淳安县| 永平县| 嘉荫县| 云南省| 建平县| 崇仁县| 乃东县| 清苑县| 饶河县| 乐昌市| 青海省| 东乡族自治县| 青岛市| 阳谷县| 西华县| 海伦市| 前郭尔| 张家口市| 凤翔县| 石棉县|