熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

log4j--新的日志操作方法

2022-06-13   來源: Java開源技術 

  准備工作
  一Tomcat已正確配置與使用
  二軟件下載logjlogjzip
  
   Logj簡介
  在強調可重用組件開發的今天除了自己從頭到尾開發一個可重用的日志操作類外Apache為我們提供了一個強有力的日志操作包Logj
  Logj是Apache的一個開放源代碼項目通過使用Logj我們可以控制日志信息輸送的目的地是控制台文件GUI組件甚至是套接口服務器NT的事件記錄器UNIX Syslog守護進程等我們也可以控制每一條日志的輸出格式通過定義每一條日志信息的級別我們能夠更加細致地控制日志的生成過程最令人感興趣的就是這些可以通過一個配置文件來靈活地進行配置而不需要修改應用的代碼
  此外通過Logj其他語言接口您可以在CC++NetPL/SQL程序中使用Logj其語法和用法與在Java程序中一樣使得多語言分布式系統得到一個統一一致的日志組件模塊而且通過使用各種第三方擴展您可以很方便地將Logj集成到JEEJINI甚至是SNMP應用中本文介紹的Logj版本是怎樣通過一個配置文件來靈活地進行配置主要的應用平台是Tomcat
  
  Logj的配置
  首先到jakarta下載一個logj的組件把jakartalogj\dist\lib下的logjjar文件copy到classpath指定的目錄下!可以是Tomcat的common\lib目錄下也可以是你需要用到logj的application下的lib目錄
  在Application目錄下的webxml文件加入以後代碼
  <servlet>
  <servletname>logj</servletname>
  <servletclass>comapachejakartalogjLogjInit</servletclass>
  <initparam>
  <paramname>logj</paramname>
  <paramvalue>/WEBINF/logjproperties</paramvalue>
  </initparam>
  <loadonstartup></loadonstartup>
  </servlet>
  
  這段代碼的意思是說在Tomcat啟動時加載comapachejakartalogjLogjInit這個名叫LogjInitclass這個類文件其中LogjInitclass的源代碼如下
  
  package comapachejakartalogj;
  import orgapachelogjPropertyConfigurator;
  import javaxservlethttpHttpServlet;
  import javaxservlethttpHttpServletRequest;
  import javaxservlethttpHttpServletResponse;
  public class LogjInit extends HttpServlet {
  
  public void init() {
  String prefix = getServletContext()getRealPath(/);
  String file = getInitParameter(logj);
  // if the logjinitfile is not set then no point in trying
  Systemoutprintln(logj start);
  if(file != null) {
  Propnfigure(prefix+file);
  }
  }
  public void doGet(HttpServletRequest req HttpServletResponse res) {
  }
  }
  這段代碼很簡單可以看出在加載的過程中程序會讀取/WEBINF/logjproperties這個文件
  這個文件就是本文的重點也就是logj的配置文件
  
  # Set root logger level to DEBUG and its only appender to A
  #logj中有五級logger
  #FATAL
  #ERROR
  #WARN
  #INFO
  #DEBUG
  #配置根Logger其語法為
  #logjrootLogger = [ level ] appenderName appenderName
  logjrootLogger=INFO A R
  #這一句設置以為著所有的log都輸出
  #如果為logjrootLogger=WARN 則意味著只有WARNERRORFATAL
  #被輸出DEBUGINFO將被屏蔽掉
  # A is set to be a ConsoleAppender
  #logj中Appender有幾層如控制台文件GUI組件甚至是套接口服務器NT的事件記錄器UNIX Syslog守護進程等
  #ConsoleAppender輸出到控制台
  logjappenderA=orgapachelogjConsoleAppender
  # A 使用的輸出布局其中logj提供種布局 orgapachelogjHTMLLayout(以HTML表格形式布局)
  #orgapachelogjPatternLayout(可以靈活地指定布局模式)
  #orgapachelogjSimpleLayout(包含日志信息的級別和信息字符串)
  #orgapachelogjTTCCLayout(包含日志產生的時間線程類別等等信息)
  
  logjappenderAlayout=orgapachelogjPatternLayout
  #靈活定義輸出格式 具體查看logj javadoc orgapachelogjPatternLayout
  #d 時間
  logjappenderAlayoutConversionPattern=%d{yyyyMMdd HH:mm:ss} [%c][%p] %m%n
  #R 輸出到文件 RollingFileAppender的擴展可以提供一種日志的備份功能
  logjappenderR=orgapachelogjRollingFileAppender
  #日志文件的名稱
  logjappenderRFile=logjlog
  #日志文件的大小
  logjappenderRMaxFileSize=KB
  # 保存一個備份文件
  logjappenderRMaxBackupIndex=
  
  logjappenderRlayout=orgapachelogjTTCCLayout
  #logjappenderRlayoutConversionPattern=%d{yyyyMMdd HH:mm:ss} [%c][%p] %m%n
  
  配置以這裡就差不多了如果你想更深入了解配置文件的各個細節可以去查看docs還有在文章的最後面我們提供配置文件中一些主要的語法下面我們來看看怎樣在程序中使用logj
  
   Logj的使用
  使用Logj第一步就是獲取日志記錄器這個記錄器將負責控制日志信息其語法為
  public static Logger getLogger( String name)
  必須在使用前要把這個類導入
  import orgapachelogjLogger;
  
  name一般是類文件的名字如下
  static Logger logger = LoggergetLogger (classgetName () ) ;
  
  您就可以輕松地使用不同優先級別的日志記錄語句插入到您想記錄日志的任何地方其語法如下
  loggerdebug ( Object message ) ;
   ( Object message ) ;
  loggerwarn ( Object message ) ;
  loggererror ( Object message ) ;
  
  為什麼這裡要分級別的呢?試想一下我們在寫程序的時候為了調試程序會在很多會出錯的地方加入大量的();信息當然程序調試完畢我們不需要這些輸出信息了那怎麼辦呢?以前的做法是把每個程序中的刪除但這是不現實的如果程序不大還可以但如果程序很多做這些事情就很煩人了但因為logj分級別了當我們不需要輸出這樣調試時用到的()時我們可以把輸出的級別調高如調到warn或error級別這樣info級別及以下的級別就不會出輸出了是不是很方便的呢?
  
  其實除了這種使用方式logj還有其它的使用方面不需要配置文件直接在程序中定義輸入出級別層次等信息如果要了解這方法的使用可以參考文檔
  
  附注
  以下是配置文件的一些重要的語法
  定義配置文件
  
  其實您也可以完全不使用配置文件而是在代碼中配置Logj環境但是使用配置文件將使您的應用程序更加靈活
  
  Logj支持兩種配置文件格式一種是XML格式的文件一種是Java特性文件(鍵=值)下面我們介紹使用Java特性文件做為配置文件的方法
  
  配置根Logger其語法為
  
  logjrootLogger = [ level ] appenderName appenderName
  其中level 是日志記錄的優先級分為OFFFATALERRORWARNINFODEBUGALL或者您定義的級別Logj建議只使用四個級別優先級從高到低分別是ERRORWARNINFODEBUG通過在這裡定義的級別您可以控制到應用程序中相應級別的日志信息的開關比如在這裡定義了INFO級別則應用程序中所有DEBUG級別的日志信息將不被打印出來
  appenderName就是指定日志信息輸出到哪個地方您可以同時指定多個輸出目的地
  
  配置日志信息輸出目的地Appender其語法為
  
  logjappenderappenderName = fullyqualifiednameofappenderclass
  logjappenderappenderNameoption = value
  …
  logjappenderappenderNameoption = valueN
  其中Logj提供的appender有以下幾種
  orgapachelogjConsoleAppender(控制台)
  orgapachelogjFileAppender(文件)
  orgapachelogjDailyRollingFileAppender(每天產生一個日志文件)
  orgapachelogjRollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
  orgapachelogjWriterAppender(將日志信息以流格式發送到任意指定的地方)
  //往數據庫中加入日志
  logjappenderR=orgapachelogjjdbcJDBCAppender
  logjappenderRURL=jdbc:mysql://localhost/log
  logjappenderRusername=root
  logjappenderRpassword=
  logjappenderRsql=INSERT INTO TEST (msg) VALUE (%d %c &m)
  logjappenderRlayout=orgapachelogjPatternLayout
  
  配置日志信息的格式(布局)其語法為
  
  logjappenderappenderNamelayout = fullyqualified
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28002.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.