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

使用Log4j進行日志操作

2013-11-23 20:27:52  來源: Java開源技術 

   概述
   背景
  
  在應用程序中添加日志記錄總的來說基於三個目的監視代碼中變量的變化情況周期性的記錄到文件中供其他應用進行統計分析工作跟蹤代碼運行時軌跡作為日後審計的依據擔當集成開發環境中的調試器的作用向文件或控制台打印代碼的調試信息
  
  最普通的做法就是在代碼中嵌入許多的打印語句這些打印語句可以輸出到控制台或文件中比較好的做法就是構造一個日志操作類來封裝此類操作而不是讓一系列的打印語句充斥了代碼的主體
  
   Logj簡介
  
  在強調可重用組件開發的今天除了自己從頭到尾開發一個可重用的日志操作類外Apache為我們提供了一個強有力的日志操作包Logj
  
  Logj是Apache的一個開放源代碼項目通過使用Logj我們可以控制日志信息輸送的目的地是控制台文件GUI組件甚至是套接口服務器NT的事件記錄器UNIX Syslog守護進程等我們也可以控制每一條日志的輸出格式通過定義每一條日志信息的級別我們能夠更加細致地控制日志的生成過程最令人感興趣的就是這些可以通過一個配置文件來靈活地進行配置而不需要修改應用的代碼
  
  此外通過Logj其他語言接口您可以在CC++NetPL/SQL程序中使用Logj其語法和用法與在Java程序中一樣使得多語言分布式系統得到一個統一一致的日志組件模塊而且通過使用各種第三方擴展您可以很方便地將Logj集成到JEEJINI甚至是SNMP應用中
  
  本文介紹的Logj版本是作者試圖通過一個簡單的客戶/服務器Java程序例子對比使用與不使用Logj 的差別並詳細講解了在實踐中最常使用Logj的方法和步驟在強調可重用組件開發的今天相信Logj將會給廣大的設計開發人員帶來方便加入到Logj的隊伍來吧!
  
   一個簡單的例子
  我們先來看一個簡單的例子它是一個用Java實現的客戶/服務器網絡程序剛開始我們不使用Logj而是使用了一系列的打印語句然後我們將使用Logj來實現它的日志功能這樣大家就可以清楚地比較出前後兩個代碼的差別
  
   不使用Logj
  
   客戶程序
  
  package logj ;
  
  import javaio* ;
  import * ;
  
  /**
   *
   * <p> Client Without Logj </p>
   * <p> Description: a sample with logj</p>
   * @version
   */
  public class ClientWithoutLogj {
  
    /**
     *
     * @param args
     */
    public static void main ( String args [] ) {
  
      String welcome = null;
      String response = null;
      BufferedReader reader = null;
      PrintWriter writer = null;
      InputStream in = null;
      OutputStream out = null;
      Socket client = null;
  
      try {
        client = new Socket ( localhost ) ;
        Systemoutprintln ( info: Client socket: + client ) ;
        in = clientgetInputStream () ;
        out = clientgetOutputStream () ;
      } catch ( IOException e ) {
        Systemoutprintln ( error: IOException : + e ) ;
        Systemexit ( ) ;
      }
  
      try{
        reader = new BufferedReader( new InputStreamReader ( in ) ) ;
        writer = new PrintWriter ( new OutputStreamWriter ( out ) true ) ;
  
        welcome = readerreadLine () ;
        Systemoutprintln ( debug: Server says: + welcome + ) ;
  
        Systemoutprintln ( debug: HELLO ) ;
        writerprintln ( HELLO ) ;
        response = readerreadLine () ;
        Systemoutprintln ( debug: Server responds: + response + ) ;
  
        Systemoutprintln ( debug: HELP ) ;
        writerprintln ( HELP ) ;
        response = readerreadLine () ;
        Systemoutprintln ( debug: Server responds: + response + ) ;
  
        Systemoutprintln ( debug: QUIT ) ;
        writerprintln ( QUIT ) ;
      } catch ( IOException e ) {
        Systemoutprintln ( warn: IOException in clientinreadln() ) ;
        Systemoutprintln ( e ) ;
      }
      try{
        Threadsleep ( ) ;
      } catch ( Exception ignored ) {}
    }
  }
  
   服務器程序
  
  package logj ;
  
  import javautil* ;
  import javaio* ;
  import * ;
  
  /**
   *
   * <p> Server Without Logj </p>
   * <p> Description: a sample with logj</p>
   * @version
   */
  public class ServerWithoutLogj {
  
    final static int SERVER_PORT = ; // this servers port
  
    /**
     *
     * @param args
     */
    public static void main ( String args [] ) {
      String clientRequest = null;
      BufferedReader reader = null;
      PrintWriter writer = null;
      ServerSocket server = null;
      Socket socket = null;
      InputStream in = null;
      OutputStream out = null;
  
      try {
        server = new ServerSocket ( SERVER_PORT ) ;
        Systemoutprintln ( info: ServerSocket before accept: + server ) ;
        Systemoutprintln ( info: Java server without logj online! ) ;
  
        // wait for clients connection
        socket = serveraccept () ;
        Systemoutprintln ( info: ServerSocket after accept: + server ) ;
  
        in = socketgetInputStream () ;
        out = socketgetOutputStream () ;
  
      } catch ( IOException e ) {
        Systemoutprintln( error: Server constructor IOException: + e ) ;
        Systemexit ( ) ;
      }
      reader = new BufferedReader ( new InputStreamReader ( in ) ) ;
      writer = new PrintWriter ( new OutputStreamWriter ( out ) true ) ;
  
      // send welcome string to client
      writerprintln ( Java server without logj + new Date () ) ;
  
      while ( true ) {
        try {
          // read from client
          clientRequest = readerreadLine () ;
          Systemoutprintln ( debug: Client says: + clientRequest ) ;
          if ( clientRequeststartsWith ( HELP ) ) {
            Systemoutprintln ( debug: OK! ) ;
            writerprintln ( Vocabulary: HELP QUIT ) ;
          }
          else {
            if ( clientRequeststartsWith ( QUIT ) ) {
              Systemoutprintln ( debug: OK! ) ;
              Systemexit ( ) ;
            }
            else{
              Systemoutprintln ( warn: Command +
   clientRequest + not understood ) ;
              writerprintln ( Command + clientRequest
   + not understood ) ;
            }
          }
        } catch ( IOException e ) {
          Systemoutprintln ( error: IOException in Server + e ) ;
          Systemexit ( ) ;
        }
      }
    }
  }
  
   遷移到Logj
  
   客戶程序
  
  package logj ;
  
  import javaio* ;
  import * ;
  
  // add for logj: import some package
  import orgapachelogjPropertyConfigurator ;
  import orgapachelogjLogger ;
  import orgapachelogjLevel ;
  
  /**
   *
   * <p> Client With Logj </p>
   * <p> Description: a sample with logj<
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28526.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.