Hi Prajwal,
Thank you for the email.
I am doing approximatly similar way. Here is my code.
Kindly let me know if there are any mistakes.
private class LogSettingsRefresher extends TimerTask {
persistenceConfiguration = // implements org.apache.commons.configuration.Configuration
@Override
public void run() {
try {
LOG.info("Refreshing log settings.");
final ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
root.setLevel(Level.toLevel(persistenceConfiguration.getString(LOG_ROOT_LEVEL)));
final Iterator<Appender<ILoggingEvent>> iteratorForAppenders = root.iteratorForAppenders();
while (iteratorForAppenders.hasNext()) {
Appender<ILoggingEvent> appender = iteratorForAppenders.next();
if (StringUtils.containsIgnoreCase(appender.getName(), "syslog")
|| StringUtils.containsIgnoreCase(appender.getName(), "console")) {
boolean createSysLogAppender = false;
appender.stop();
root.detachAppender(appender.getName());
if (StringUtils.containsIgnoreCase(persistenceConfiguration.getString(LOG_APPENDER), "syslog")
|| (appender instanceof SyslogAppender)) {
createSysLogAppender = true;
}
if(createSysLogAppender){
SyslogAppenderFactory syslogAppenderFactory = new SyslogAppenderFactory();
syslogAppenderFactory.setHost(persistenceConfiguration.getString(LOG_SYS_HOST));
syslogAppenderFactory.setFacility(Facility.valueOf(persistenceConfiguration.getString(LOG_SYS_FACILITY).toUpperCase()));
syslogAppenderFactory.setLogFormat(persistenceConfiguration.getString(LOG_LAYOUT));
Appender<ILoggingEvent> syslogAppender = syslogAppenderFactory.build(root.getLoggerContext(), getName(), null);
root.addAppender(syslogAppender);
}else{
ConsoleAppenderFactory appenderFactory = new ConsoleAppenderFactory();
appenderFactory.setLogFormat(persistenceConfiguration.getString(LOG_LAYOUT));
Appender<ILoggingEvent> consoleAppender = appenderFactory.build(root.getLoggerContext(), getName(), null);
root.addAppender(consoleAppender);
}
}
}
LOG.info("Refreshing log settings Done.");
} catch (Exception e) {
// Ignore
LOG.debug("some exception occured while refreshing the log settings", e);
}
}
}