2012-07-13 41 views
1

我寫了一個自定義的appender JTableAppender,它實現了ILoggingEvent。這個appender有一個公開的setter方法setModel(..)爲appender分配一個表模型,所以我可以在doAppend()中操縱模型。在Logback中使用getAppender()

的JTableAppender在一個XML文件,在那裏我將它命名爲表可配置:

<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(...); 

我得到exactl一個NullPointerException模型這條線。 getAppender()並不如我所願。

+0

要將哪個記錄器附加到appender?您應該在該記錄器上調用getAppender。 – Ceki 2012-07-13 19:37:08

+0

告訴我你的記錄器的設置。看起來你沒有添加Appender到你的記錄器,所以'logger.getAppender(「TABLE」)'返回'null'。 – Simulant 2012-07-16 12:03:46

+0

好的謝謝你們的提示。我忘了在配置文件中提到appender。 – 2012-07-19 08:34:47

回答

2

求助:使用Logger.getRootLogger()代替你的本地變量'logger'。

例如

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

這樣做,你不會得到NullException,並適用於你的appender變化,那麼你必須這樣寫:使用emailAppender.activateOptions();

0

的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")