2015-02-28 3 views
1

Я использую webapp на tomcat с использованием spring-boot.Как изменить log4j2 путь регистрации на tomcat?

Как я могу изменить путь регистрации журнала динамически? (например, jvm args, файл свойств, или еще)?

До сих пор я настроил XML журнала следующим образом:

<Configuration> 
    <Properties> 
     <property name="path">${bundle:application:log.path}</property> 
    </Properties> 
</Configuration> 

с файлом конфигурации:

#application.properties: 
log.path=d:/ 

Теперь я хочу, чтобы динамически заставить LogPath, например, к d:/log-test, но без изменения моего war файл. Поскольку при перераспределении я потерял бы любую ручную конфигурацию.

Как я могу предоставить другой путь ведения журнала?

Я хочу запустить несколько профилей на одной машине, поэтому для меня здесь не нужны свойства среды или системы.

+0

Файл войны при развертывании должен получить un-jar'd, и вы должны быть в состоянии напрямую изменить свой файл свойств. Вам просто нужно перезапустить приложение, чтобы log4j снова читал файл свойств. –

+0

@RaviThapliyal - это именно то, что я хочу предотвратить, так как при развертывании новой версии я должен будет каждый раз модифицировать файл войны. не говоря, что коллеги могут пропустить этот важный шаг ... – membersound

+0

Лог-путь редко абсолютный, и это не похоже на то, что он меняет его при каждом развертывании. Окончательный путь, очевидно, будет привязан к вашему репозиторию и отражен в окончательной сборке. Какая польза от внешних значений для файла свойств, если вы все еще чувствуете необходимость переопределить его? Думаю, что делать это после сборки, вроде бы поражает свою цель. –

ответ

2

Вы можете сделать это несколькими способами упоминалось here

если вы хотите переменной окружения, то вы могли бы сделать что-то вроде:

${env:MY_LOG_PATH} 

если в системе свойств, то:

${sys:MY_LOG_PATH} 
+0

Ни одно из этих свойств не является полезным для меня, поскольку я хочу запустить тестовый профиль + dev на одном компьютере. – membersound

+0

Итак, вы должны четко указать на это. Вы только что сказали: «Теперь я хочу динамически заставить logpath, например, d:/log-test, но без изменения моего военного файла». Почему это не сработает для вас? Не можете ли вы определить два разных системных свойства на одном компьютере? – SMA

+0

Если я определяю 2 разных системных реквизита, то я должен явным образом редактировать содержимое журнала в моей войне. снова это то, что я хочу предотвратить. – membersound

1

As уже было предложено использовать $ {sys: LOG_PATH}, вероятно, лучшее решение. Вам не нужно изменять войну, но вам нужно запустить tomcat для dev и отдельный tomcat для теста. Затем просто установите CATALINA_OPTS для включения -DLOG_PATH =/my/log/path в setenv.sh или setenv.bat. На самом деле не было бы большого смысла, чтобы один tomcat работал в любом случае.

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