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

转载于:https://my.oschina.net/u/200090/blog/37608

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值