`
wanwok
  • 浏览: 31366 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
    网上有关LOG4J的配置很多,其中也有不少提到:“可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等”。我想把目志输出到JTextArea,网上搜了很久,没找到一个好的例子,无意间看到一个网友的贴子,有一段代码,下下来,一试,还不行,经过几翻调试,终于可以了,加了一些注释,代码贴在下面,希望对有需要人的有所帮助。

Log4jMain.java
package log4;

import java.io.PipedReader;
import java.io.PipedWriter;
import java.io.Writer;

import org.apache.log4j.Appender;
import org.apache.log4j.Logger;
import org.apache.log4j.WriterAppender;

/**
 * 
 * 类描述:
 * 截取 WriterAppender 输出流
 * 控制 输出流 目地的
 * @author XXX
 * @date 2010-3-16 创建
 * @version 1.0
 */
public class Log4jMain {
    public static void main(String[] arg) {
    	/**
    	 * 获取记录器,通用的写法  
    	 * 		Logger root = Logger.getLogger(Log4jMain.class);   本类类名
    	 * 		取得的记录器名称为 "Log4jMain"
    	 * 		而 log4j.rootLogger 为所有记录器的父类
    	 * 		没有配置子记录器时,子类都继承父类的 level and Appender 所以会输出所有 log
    	 * 
    	 * 		配置子记录器:log4j.logger.Log4jMain  ,将按子记录器的 level and Appender  输出 log
    	 */
        Logger root = Logger.getLogger("Log4jMain");							// @1
        try {
        	// 获取子记录器的输出源 
            Appender appender = root.getAppender("WriterAppender");
            // 定义一个未连接的输入流管道
            PipedReader reader = new PipedReader();
            // 定义一个已连接的输出流管理,并连接到reader
            Writer writer = new PipedWriter( reader) ;
            // 设置 appender 输出流
            ((WriterAppender) appender).setWriter(writer);
            
            Thread t = new AppenderThread(reader);
            t.start();
            
            // 打印 log
            Logger logger = Logger.getLogger("Log4jMain");						// @2    	与@1取到是同一个记录器
            logger.error("This is error");
            logger.info("This is info");
            logger.debug("This is debug");
            logger.fatal("This is fatal");
        } catch (Exception e) {
        }

    }
    
}



AppenderThread.java
package log4;

import java.io.PipedReader;
import java.util.Scanner;

import log4gui.log4j.LogTest;

/**
 * 
 * 类描述:
 * 不间断地扫描输入流
 * 将扫描到的字符流打印在屏目 和传送到GUI组件
 * @author xxx
 * @date 2010-3-16 创建
 * @version 1.0
 */
public class AppenderThread extends Thread {
    PipedReader reader;

    public AppenderThread(PipedReader reader) {
        this.reader = reader;
    }

    public void run() {
    	// 不间断地扫描输入流
        Scanner scanner = new Scanner(reader);
        
        // 将扫描到的字符流打印在屏目
        while (scanner.hasNext()) {
            System.out.println(scanner.nextLine());
            
            // 实现将字符流打印在GUI组件上     减少代码量 就不
        }
    }
}


log4j.properties
log4j.rootLogger= DEBUG
log4j.logger.Log4jMain =  INFO,WriterAppender

log4j.appender.WriterAppender=org.apache.log4j.WriterAppender
log4j.appender.WriterAppender.Threshold=debug
log4j.appender.WriterAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.WriterAppender.layout.ConversionPattern=%d{ISO8601} - %p - %m%n

# Configure appender stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
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
1
0
分享到:
评论

相关推荐

    详细讲解Java中log4j的使用方法

    - **log4j.appender.R**:定义了一个名为“R”的滚动文件输出Appender,该Appender会在文件大小达到100KB时创建备份文件,并保留一个备份。 - **ConversionPattern**:指定了日志输出的模式。例如,`%5p`表示输出5个...

    log4j的笔记

    Log4j 提供了多种 Appender 类,例如 ConsoleAppender(控制台)、FileAppender(文件)、DailyRollingFileAppender(每天创建新的日志文件)、RollingFileAppender(按文件大小滚动日志)、WriterAppender(将日志...

    log4j的用法

    Log4j 提供了灵活的日志级别控制(例如 DEBUG、INFO、WARN、ERROR 和 FATAL),以及丰富的日志输出格式和目的地选择(如控制台、文件、GUI 组件等)。 #### 二、Log4j 的核心组件 ##### 1. Logger Logger 是 Log4...

    log4j配置代码

    它可以将日志输出到多种目的地,如控制台、文件、GUI组件、网络等。日志级别可以灵活设定,如OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,允许精细化控制日志生成。最重要的是,所有这些设置都可以通过配置文件动态...

    Log4j使用总结.doc

    日志信息可以输出到控制台、文件、GUI组件、网络套接字、NT事件记录器或UNIX Syslog服务等。Log4j提供了多种Appender类来实现这些功能,如: - ConsoleAppender:将日志输出到控制台,默认输出到System.out,可...

    log4j使用总结,非常详细

    除了基础的ConsoleAppender、FileAppender和DailyRollingFileAppender,Log4j还提供了其他类型的appender,如RollingFileAppender根据文件大小自动滚动,WriterAppender则允许将日志输出到自定义的流。 总的来说,...

    log4j学习.doc

    Log4j的主要优势在于它的灵活性和可配置性,可以根据需求将日志输出到不同的目的地,如控制台、文件、GUI组件等,并能自由定制日志格式和级别。 在实际使用Log4j之前,我们需要配置其核心组件,包括Logger、...

    详解Java中log4j.properties配置与加载应用

    * org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) ConsoleAppender 选项: * Threshold=WARN:指定日志消息的输出最低层次。 * ImmediateFlush=true:默认值是 true,意谓着所有的消息...

Global site tag (gtag.js) - Google Analytics