java - 在Logback中,使用 getAppender()

  显示原文与译文双语对照的内容

我编写了一个定制附加器 JTableAppender 来实现 ILoggingEvent 。 这个附加器有一个 public setter方法 setModel(..) 来分配一个表模型到附加器,所以我可以在 doAppend() 中操作这个模型。

在xml文件中配置了 JTableAppender,我在其中命名它:


<appender name="TABLE" class="blabla.jgwf.test.logger.JTableAppender">
 <!-- encoders are by default assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder -->

 <encoder> 
 <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
 </pattern>
 </encoder>
</appender>

为了能够从外部使用setter方法,我尝试使用


Logger logger = (Logger) LoggerFactory.getLogger("blabal");
JTableAppender<ILoggingEvent> appender = (JTableAppender<ILoggingEvent>)logger.getAppender("TABLE");

当我试图使用


appender.setModel(...);

我得到了这个行的一个 NullPointerException 。 getAppender() 并不像我希望的那样工作。

时间: 原作者:

解决: 使用 Logger.getRootLogger() 代替局部变量'记录器'。

( 例如) )


SMTPAppender emailAppender = 
(SMTPAppender)Logger.getRootLogger().getAppender("SMTPAppender");

执行这里操作,你将得到 NullException,在你的附加程序上对应用更改:你必须编写以下内容: emailAppender.activateOptions();

...