2013-11-15 4 views
1

Возможно ли иметь условия в log4j.properties. У меня есть ситуация, когда я хочу, чтобы уровень ведения журнала был установлен в Info on production environment и DEBUG на локальном уровне. Можно ли читать переменные среды в log4j.properties.Уровень ведения журнала регистрации в Log4j.properties

+0

Попробуйте использовать две версии свойств log4j для вашей среды и поместите их из приложения и добавьте в путь к классам. – Keerthivasan

+0

log4j также может управляться программно - возможно, не то, что вы хотите, но –

+0

Спасибо за ответ, я использую этот подход в одном из моих webapps, но это приводит к избыточности, мне было интересно, есть ли способ сделать это условным –

ответ

3

Нет, вы должны иметь 2 различных log4j.properties файл

1

Вы можете готовить различные сборки и решить, какие log4j.propeties вы хотите включить в момент сборки, например, с использованием Maven Params, профили или любым другим способом , Невозможно объявить условие в log4j.properties

+1

Это может быть полезно для автономных приложений, в которых у вас нет доступа к конфигурации контейнера. Если вы используете Tomcat, т.е. и у вас есть доступ к конфигурации, более гибкий, чтобы не включать log4j.properties в webapp и настраивать ведение журнала косвенно через контейнер. –

0

Что я хотел бы предложить, как сказано в комментарии, иметь отдельную версию файла свойств log4j для каждой среды и соблюдать соглашение об именах для удобства обслуживания. скажем, для среды dev, это будет log4j-dev.xml и для производства log4j-prod.xml. Теперь вы можете настроить соответствующий файл для сбора во время работы с использованием

-Dlog4j.configuration=log4j-prod.xml 

во время запуска сервера. так что соответствующий файл conffiguration будет выполнен log4j.

+0

В дополнение к вашему ответу, мы можем поддерживать несколько файлов log4j и время сборки на основе среды, выбрали требуемый. –

+1

Да, это было бы здорово с помощью ANT или чего-то подобного this.cool. – Keerthivasan

0

Вы можете использовать программную конфигурацию при использовании log4j, что дает вам больший контроль над тем, какие опции использовать в какой среде. Вы можете иметь свои собственные файлы конфигурации и использовать свою собственную логику для преобразования их в конфигурацию log4j. Недостатком является то, что вам нужно выполнить init() где-то в вашем приложении. This answer обеспечивает хорошую ссылку.

2

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

Создайте конструкцию ONE, содержащую конфигурацию по умолчанию, возможно, ту, которую вы хотите использовать в процессе производства.

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

В качестве альтернативы вы можете указать местоположение файла конфигурации для использования через переменные окружения при запуске: -Dlog4j.configuration=log4j-prod.xml (заимствованные из ответа Keerthi Раманатана в)

1

No. Но только очертить некоторые другие варианты

в) Я бы посоветовал вам взглянуть на журнал, который обеспечивает простой фасад над log4j, и вы можете изменить свой конфиг во время выполнения. Соответствующая документация может быть найдена here.

b) Если у вас есть процесс сборки на месте (ant/maven), вы можете сделать замену как часть процесса сборки. Если вы используете maven, вы можете настроить profile to build и применить в цикл построения filtering

c) Загрузите файлы log4j из каталога conf для каждой среды. Идея заключается в том, что файлы, установленные для среды, изменяются минимально с течением времени. Вы поддерживаете как в своем репозитории, так и как часть процесса развертывания, убедитесь, что дополнительные/удаленные файлы/реквизиты добавлены/удалены.

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