热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

log4j输出流(WriterAppender)输出到GUI组件

2019独角兽企业重金招聘Python工程师标准网上有关LOG4J的配置很多,其中也有不少提到:“可以控制日志信息输送的目的地是控制台、文件、GU

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

网上有关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



推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
author-avatar
洁西卡915_922
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有