Я знаю, что ваша тема больше не нова, но в любом случае у меня такая же проблема с WatchDog
(Часть с соединением JDBC уже решена: ссылка на Tomcat wiki )
, кажется, запустил поток с именем [FileWatchdog], но не смог остановить его. Это может привести к утечке памяти.
Они стараются исправить это в одном из следующих выпусков log4j ссылка на парад ошибок log4j
Но я думаю, что есть способ обойти. Я запускаю «WatchDog» так:
@PostConstruct
private void initLogging(File log4JConfig) {
if (loggingExecutor == null) {
LogManager.resetConfiguration();
XMLWatchdog xdog = new XMLWatchdog(log4JConfig.getAbsolutePath());
loggingExecutor = Executors.newSingleThreadScheduledExecutor();
loggingExecutor.scheduleAtFixedRate(xdog, 0, 5, TimeUnit.MINUTES);
Logger logger = Logger.getLogger(ConfigurationService.class);
logger.info("Logging is initialized with the following configuration file: " + log4JConfig.getAbsolutePath());
} else {
logger.info("Logger is already ruinning");
}
}
/**
* Nasty bug:
*
* https://issues.apache.org/bugzilla/show_bug.cgi?id=4913
*
*
* @author Johannes.Hoehne
*
*/
private static class XMLWatchdog extends FileWatchdog {
XMLWatchdog(String filename) {
super(filename);
setName("LogFileChecker");
}
public void doOnChange() {
new DOMConfigurator().doConfigure(filename, LogManager.getLoggerRepository());
}
@Override
public void run() {
checkAndConfigure();
}
}
И потом снова остановите это, как это
@PreDestroy
public void shutDownLogger() {
logger.info("Will shut down logger task " + loggingExecutor);
loggingExecutor.shutdown();
}