
Question:
I wrote a custom appender JTableAppender
which implements ILoggingEvent
. This appender have a public setter-method setModel(..)
to assign a table model into the appender, so I can manipulate the model in doAppend()
.
The JTableAppender is configurated in an XML-File, where I named it 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>
To be able to use the setter-method from the outside, i tried to get the appender using
Logger logger = (Logger) LoggerFactory.getLogger("blabal");
JTableAppender<ILoggingEvent> appender = (JTableAppender<ILoggingEvent>)logger.getAppender("TABLE");
When I tried to set a model using
appender.setModel(...);
I get a NullPointerException for exactly this line. The getAppender() didn't work as I wish it would.
Answer1:<strong>SOLVED</strong>: Use Logger.getRootLogger() instead your local variable 'logger'.
(<em>example</em>)
SMTPAppender emailAppender =
(SMTPAppender)Logger.getRootLogger().getAppender("SMTPAppender");
doing this, you wont get NullException, and to <strong>APPLY</strong> changes on your appender then you have to write this: emailAppender.activateOptions();
using logback 1.1.3 I had to:
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")