java - 在 Logback 中使用 getAppender()

标签 java logging logback appender

我编写了一个自定义附加程序JTableAppender,它实现了ILoggingEvent。此附加程序有一个公共(public) setter setModel(..) 来将表模型分配给附加程序,因此我可以在 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 ,我尝试使用以下方法获取附加器

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

当我尝试使用设置模型时

appender.setModel(...);

对于这一行,我得到了一个 NullPointerException 异常。 getAppender() 没有像我希望的那样工作。

最佳答案

已解决:使用 Logger.getRootLogger() 代替本地变量“logger”。

(示例)

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

这样做,你不会得到 NullException,并且要在你的附加器上应用更改,那么你必须编写以下内容:emailAppender.activateOptions();

关于java - 在 Logback 中使用 getAppender(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11471202/

相关文章:

linux - 在 RHEL-7 中将 Auditd.log 数据重定向到 rsyslog

logging - 有没有办法删除逻辑应用运行历史记录/日志?

Javaagent 报告 "redefineClasses is not supported in this environment"

java - 如何重新加载/刷新代号一中的组件?

asp.net - Log4Net、ThreadContext 和 Global.asax

java - Logback审计问题

日志记录级别 - Logback - 分配日志级别的经验法则

java - 为什么迭代排列生成器比递归慢?

java - JGit - 推送分支并添加上游(-u 选项)

spring - 升级到 Spring Boot 1.4.0 后,AbstractPlatformTransactionManager 中的 NullPointerException