1

我编写了一个自定义附加程序JTableAppender,它实现了ILoggingEvent. 这个 appender 有一个公共的 settersetModel(..)来为 appender 分配一个表模型,所以我可以在doAppend().

JTableAppender 在一个 xml 文件中配置,我将其命名为 TABLE:

<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,我尝试使用 appender

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

当我尝试使用设置模型时

appender.setModel(...);

正是这一行,我得到了 NullPointerException。getAppender() 没有像我希望的那样工作。

4

2 回答 2

3

已解决:使用 Logger.getRootLogger() 代替您的局部变量“记录器”。

示例

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

这样做,你不会得到 NullException,并且要你的 appender 上应用更改,那么你必须这样写:emailAppender.activateOptions();

于 2015-04-08T16:43:07.653 回答
1

使用 logback 1.1.3 我必须:

import ch.qos.logback.classic.Logger
import org.slf4j.LoggerFactory    
...
val root: Logger = val root: Logger = LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME).asInstanceOf[Logger]
val myAppender = root.getAppender("MyAppenderName")
于 2015-12-22T16:39:48.517 回答