在log4j中使用自定义的Appender

在项目中需将log4j输出转到GUI文本框,可继承AppenderSkeleton类实现自定义输出控制。介绍了该类的抽象方法append,还参考了WriterAppender的实现。写好自定义类后,在log4j.properties配置文件中赋值,log4j启动就会使用自定义Appender。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做项目时需要把log4j的输出转到GUI上的一个文本框,在同学的帮助下得知可以自己继承AppenderSkeleton类而实现自己对输出的任何控制。但上网搜索却无所得,所以把经验共享一下。
AppenderSkeleton有一个抽象方法:
None.gifprotected abstract void append(LoggingEvent event)
继承该类并实现这个方法,LoggingEvent.Message中即是输出的字符串,来参考一下WriterAppender的实现:
ExpandedBlockStart.gifContractedBlock.gifprotected void subAppend(LoggingEvent eventdot.gif{
InBlock.gif  
this.qw.write(this.layout.format(event));
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif  
if (layout.ignoresThrowable()) dot.gif{
InBlock.gif    String[] s 
= event.getThrowableStrRep();
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
if (s != nulldot.gif{
InBlock.gif      
int len = s.length;
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif      
for (int i = 0; i < len; i++dot.gif{
InBlock.gif        
this.qw.write(s[i]);
InBlock.gif        
this.qw.write(Layout.LINE_SEP);
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockEnd.gif    }

ExpandedSubBlockEnd.gif  }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif  
if (this.immediateFlush) dot.gif{
InBlock.gif    
this.qw.flush();
ExpandedSubBlockEnd.gif  }

ExpandedBlockEnd.gif}

None.gif
可以看到主要就是this.qw.write(this.layout.format(event));这一行。反正主要的信息都在event里,需要什么都可以从中去取。
写好自已的类后就可以在log4j.properties配置文件中把log4j.appender的值赋为该类名。然后log4j启动读入配置文件就会使用自定义的Appender了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值