2015-11-11 2 views
1

Кто-нибудь может сообщить мне, возможно ли изменить имя файла во время выполнения. Я до сих пор успешно перенесла свои log4j.properties в log4j2.properties. Все создатели приложений, регистраторы. Если я жестко закодирую имя_файла, то мои журналы заполняются. Но, к сожалению, имя журнала должно быть именем службы, и я буду знать имя службы только во время выполнения. Это было возможно раньше с Log4j 1.x. Ранее вызов в файлAppender.setFile (logFile.getAbsolutePath()); изменит имя файла во время выполнения. Теперь мне нужно сделать что-то подобное с log4J 2.4.1. Я попробовал удалить приложение, обновив его программно и добавив приложение в конфигурацию, но не получив успеха. Создаются пустые логфайлы, но с правильным именем. Пожалуйста, кто-нибудь может мне помочь, поскольку я просто не могу это понять. Ниже приведен фрагмент кода, где я пытаюсь удалить, воссоздать приложение.Log4J2 - изменение имени файла во время выполнения

RollingFileAppender fileAppender = (RollingFileAppender) this.config.getAppender(loggerName); 
String filePattern = fileAppender.getFilePattern(); 
TriggeringPolicy policy = fileAppender.getTriggeringPolicy(); 
RolloverStrategy strategy = fileAppender.getManager().getRolloverStrategy(); 
PatternLayout layout = (PatternLayout) fileAppender.getLayout(); 
Filter filter = fileAppender.getFilter(); 
LoggerConfig lgConfig = this.config.getLogger(loggerName); 
RollingFileAppender rollingFile = RollingFileAppender.createAppender(fileName, filePattern, "true", loggerName, (String)null, (String)null, (String)null, policy, strategy, layout, filter, (String)null, "false", (String)null, config); 

config.removeAppender(loggerName); 
config.removeLogger(loggerName); 
config.addLogger(loggerName, lgConfig); 
context.updateLoggers(); 
config.addAppender((Appender)rollingFile); 

logger = LogManager.getLogger(loggerName); 

"fileName" уже установлен к моменту достижения этого бита кода.

+0

Вызов для обновленияLoggers должен быть последним. –

+0

Пробовал переместить updateLoggers в конец, но все еще пустые журналы. Теперь я проверяю, подходит ли RoutingAppenders для меня. Хотя все примеры routingappenders находятся в log4j2.xml. Я ничего не могу найти для log4j2.properties. – flume

+0

Кроме того, с RoutingAppenders можно создать сочетание приложений для добавления файлов и добавления маршрутизации. В моем приложении есть журналы, имена файлов которых я знаю только во время выполнения (как я уже упоминал в своем первом сообщении), и несколько, чьи имена файлов я уже знаю. Поэтому я могу определить простой файл rollFileAppender и logger для них. Но возможно ли это? – flume

ответ

0

Вы должны иметь возможность создать собственный поиск, чтобы получить свое имя службы, а затем ссылаться на него в файле конфигурации.

Here is an example о том, как создать пользовательский поиск.

Смежные вопросы