Как удалить экземпляр Logack Logger вручную - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть вопрос, касающийся Logback.

В соответствии с моим требованием мне нужно создать экземпляр регистратора на основе ucid, и я могу создать этот экземпляр с использованием приведенного ниже кода

public static Logger getLogger(String ucid, LoggerType loggerType) {
Logger logger = null;
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
CustomLoggingLayout layout = new CustomLoggingLayout();
layout.start();

LayoutWrappingEncoder<ILoggingEvent> lwe = new LayoutWrappingEncoder<>();
lwe.setLayout(layout);

FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
fileAppender.setFile("C:\\Tmp\\"+ucid+".log");
fileAppender.setName(ucid);
fileAppender.setEncoder(lwe);
fileAppender.setContext(lc);
fileAppender.start();

logger.addAppender(fileAppender);
logger.setLevel(Level.TRACE);
logger.setAdditive(false);
return logger;
}

После завершения записи я хочу закрыть этот экземпляр журнала. В настоящее время я могу закрыть только добавленные в этот регистратор приложения, используя приведенный ниже код

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
lc.getLogger(ucid).detachAndStopAllAppenders();

Поскольку моя программа динамически создает регистраторы во время выполнения, и эти экземпляры регистратора находятся в памяти, и это увеличивает Java Память кучи. Итак, есть ли способ закрыть экземпляры журнала, которые я создал динамически?

...