【问题标题】:Using getAppender() in Logback在 Logback 中使用 getAppender()
【发布时间】:2012-07-13 08:18:58
【问题描述】:

我编写了一个自定义附加程序JTableAppender,它实现了ILoggingEvent。这个 appender 有一个公共 setter setModel(..) 来为 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() 没有像我希望的那样工作。

【问题讨论】:

  • appender 附加到哪个记录器?您应该在该记录器上调用 getAppender。
  • 向我展示您的记录器的设置。看起来您还没有将 Appender 添加到记录器中,所以 logger.getAppender("TABLE") 返回 null
  • 好的,谢谢你们的提示。我忘了在配置文件中提到 appender。
  • // 添加此行后有效。

标签: java logging logback appender


【解决方案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")

【讨论】:

    【解决方案2】:

    已解决:使用 Logger.getRootLogger() 代替您的局部变量 'logger'。

    (例子)

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2011-11-07
      • 2013-10-27
      • 1970-01-01
      相关资源
      最近更新 更多