首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

log4j的WriterAppender的使用

2012-08-13 
log4j的WriterAppender的应用这几天做项目,需要做一个类似于控制台的界面,可以将日志回显到一个文本区域里

log4j的WriterAppender的应用

这几天做项目,需要做一个类似于控制台的界面,可以将日志回显到一个文本区域里,几经查找,反复测试写了以下测试代码。
这是log4j.properties的配置内容

log4j.rootCategory= ,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

主程序

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;

public class Log4jMain {
??? static public Logger logger = Logger.getLogger(Log4jMain.class);

??? public static void main(String[] arg) {
???????
???????
??????? Logger root = Logger.getRootLogger();
??????? try {
??????????? Appender appender = root.getAppender("WriterAppender");
??????????? PipedReader reader = new PipedReader();
??????????? Writer writer = new PipedWriter( reader) ;
???????
??????????? ((WriterAppender) appender).setWriter(writer);
???????????
??????????? Thread t = new AaaThread(reader);
??????????? t.start();
??????????? Logger logger = Logger.getLogger(Log4jMain.class);
??????????? logger.error("asdf");
??????????? logger.info("asdf");
??????????? logger.debug("asdf");
??????????? logger.fatal("asdf");
??????????????? //hh是一个class,test方法里只有几个logger.info("aaa"),用于测试用,这东西可以去掉
??????????? new HH().test();

??????? } catch (Exception e) {
??????? }??? }
???
}

?????? 因为log4j提供的是 Writer,所以通过使用PipedWriter连接到PipedReader,并通过一个thread来处理 PipedReader的数据就可以回显了。如果你需要的话可以将下面的 System.out.println(scanner.nextLine());改成你需要显示的地方就行了。

import java.io.PipedReader;
import java.util.Scanner;public class AaaThread extends Thread {
??? PipedReader reader;??? public AaaThread(PipedReader reader) {
??????? this.reader = reader;
??? }??? public void run() {
??????? Scanner scanner = new Scanner(reader);
??????? while (scanner.hasNext()) {
??????????? System.out.println(scanner.nextLine());
??????? }
??? }
}

热点排行