log4j 輸出流(WriterAppender) 輸出到 GUI 組件

網上有關LOG4J的配置不少,其中也有很多提到:「能夠控制日誌信息輸送的目的地是控制檯、文件、GUI組件、甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等」。我想把目志輸出到JTextArea,網上搜了好久,沒找到一個好的例子,無心間看到一個網友的貼子,有一段代碼,下下來,一試,還不行,通過幾翻調試,終於能夠了,加了一些註釋,代碼貼在下面,但願對有須要人的有所幫助。 

Log4jMain.java 
Java代碼    收藏代碼
  1. package log4;  
  2.   
  3. import java.io.PipedReader;  
  4. import java.io.PipedWriter;  
  5. import java.io.Writer;  
  6.   
  7. import org.apache.log4j.Appender;  
  8. import org.apache.log4j.Logger;  
  9. import org.apache.log4j.WriterAppender;  
  10.   
  11. /** 
  12.  *  
  13.  * 類描述: 
  14.  * 截取 WriterAppender 輸出流 
  15.  * 控制 輸出流 目地的 
  16.  * @author XXX 
  17.  * @date 2010-3-16 建立 
  18.  * @version 1.0 
  19.  */  
  20. public class Log4jMain {  
  21.     public static void main(String[] arg) {  
  22.         /** 
  23.          * 獲取記錄器,通用的寫法   
  24.          *      Logger root = Logger.getLogger(Log4jMain.class);   本類類名 
  25.          *      取得的記錄器名稱爲 "Log4jMain" 
  26.          *      而 log4j.rootLogger 爲全部記錄器的父類 
  27.          *      沒有配置子記錄器時,子類都繼承父類的 level and Appender 因此會輸出全部 log 
  28.          *  
  29.          *      配置子記錄器:log4j.logger.Log4jMain  ,將按子記錄器的 level and Appender  輸出 log 
  30.          */  
  31.         Logger root = Logger.getLogger("Log4jMain");                            // @1  
  32.         try {  
  33.             // 獲取子記錄器的輸出源   
  34.             Appender appender = root.getAppender("WriterAppender");  
  35.             // 定義一個未鏈接的輸入流管道  
  36.             PipedReader reader = new PipedReader();  
  37.             // 定義一個已鏈接的輸出流管理,並鏈接到reader  
  38.             Writer writer = new PipedWriter( reader) ;  
  39.             // 設置 appender 輸出流  
  40.             ((WriterAppender) appender).setWriter(writer);  
  41.               
  42.             Thread t = new AppenderThread(reader);  
  43.             t.start();  
  44.               
  45.             // 打印 log  
  46.             Logger logger = Logger.getLogger("Log4jMain");                      // @2       與@1取到是同一個記錄器  
  47.             logger.error("This is error");  
  48.             logger.info("This is info");  
  49.             logger.debug("This is debug");  
  50.             logger.fatal("This is fatal");  
  51.         } catch (Exception e) {  
  52.         }  
  53.   
  54.     }  
  55.       
  56. }  


AppenderThread.java 
Java代碼    收藏代碼
  1. package log4;  
  2.   
  3. import java.io.PipedReader;  
  4. import java.util.Scanner;  
  5.   
  6. import log4gui.log4j.LogTest;  
  7.   
  8. /** 
  9.  *  
  10.  * 類描述: 
  11.  * 不間斷地掃描輸入流 
  12.  * 將掃描到的字符流打印在屏目 和傳送到GUI組件 
  13.  * @author xxx 
  14.  * @date 2010-3-16 建立 
  15.  * @version 1.0 
  16.  */  
  17. public class AppenderThread extends Thread {  
  18.     PipedReader reader;  
  19.   
  20.     public AppenderThread(PipedReader reader) {  
  21.         this.reader = reader;  
  22.     }  
  23.   
  24.     public void run() {  
  25.         // 不間斷地掃描輸入流  
  26.         Scanner scanner = new Scanner(reader);  
  27.           
  28.         // 將掃描到的字符流打印在屏目  
  29.         while (scanner.hasNext()) {  
  30.             System.out.println(scanner.nextLine());  
  31.               
  32.             // 實現將字符流打印在GUI組件上     減小代碼量 就不  
  33.         }  
  34.     }  
  35. }  


log4j.properties 
Java代碼    收藏代碼
  1. log4j.rootLogger= DEBUG  
  2. log4j.logger.Log4jMain =  INFO,WriterAppender  
  3.   
  4. log4j.appender.WriterAppender=org.apache.log4j.WriterAppender  
  5. log4j.appender.WriterAppender.Threshold=debug  
  6. log4j.appender.WriterAppender.layout=org.apache.log4j.PatternLayout  
  7. log4j.appender.WriterAppender.layout.ConversionPattern=%d{ISO8601} - %p - %m%n  
  8.   
  9. # Configure appender stdout  
  10. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  11. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  12. log4j.appender.stdout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} %-5p %-20c - %m%n  



下面是幾個關於log4j配置的網址,平時只是能把日誌輸出到文件就能夠,也沒理解的這麼細,對學習log4j仍是有一些幫助: 
http://wenda.tianya.cn/wenda/thread?tid=0d69e2b909eeb918 
http://www.blogjava.net/xzclog/archive/2006/09/04/67481.html
相關文章
相關標籤/搜索