Для приложения, которое развертывается на большом количестве машин, я решил развернуть стандартный файл log4j.xml
с пакетом приложения, просто чтобы убедиться, что одинаковые настройки присутствуют везде: приложения, категории, уровни.
У этого есть обратная сторона: при локальном изменении уровней мы рискуем потерять изменения при повторном развертывании или сохранении старых настроек. На практике единственное, что нам нужно изменить, - это уровни логгера, чаще всего 1 из них, поэтому я ищу решение, которое позволит мне переопределить только уровни для каждой установки.
Как я могу переопределить уровни log4j, не изменяя исходный файл log4j.xml
?
3 ответа
Если вы по-прежнему хотите иметь общую основную конфигурацию, вы можете рассмотреть возможность добавления в приложение чего-нибудь, что позволяет изменять уровни логгера Log4J после инициализации. Вы можете вызывать эти изменения либо через JMX, получая переопределения из централизованного источника, либо просто периодически читая локальный файл переопределения для конкретной установки (если он есть), в зависимости от того, на какую поддержку инфраструктуры может полагаться ваше приложение.
Взгляните на здесь, чтобы получить дополнительную информацию:
Установите переменную среды log4j.configuration
так, чтобы она указывала на внешний файл. Таким образом, при повторном развертывании внешний файл не будет затронут или изменен, и, следовательно, ваша конфигурация не будет потеряна.
Для справки см. Раздел Процедура инициализации по умолчанию в руководство по log4j.
Раньше я решал такие проблемы, вводя еще одно косвенное обращение в файл свойств log4j. Например, указав как
log4j.appender.CONSOLE.Threshold = %level%.
Во время выполнения первое, что я делал, это заменял заполнители в памяти или придерживался значений по умолчанию. Таким образом, конфигурация log4j никогда не менялась на протяжении всех развертываний, включая разработчиков, QA и даже производство. У каждой цели будет свой основной набор параметров конфигурации, среди которых будут% заполнители% для уровня. Эти параметры будут либо приходить с установщиком, либо каждый пользователь сохранит основную конфигурацию в стороне при загрузке новой версии для работы. Но конфигурация log4j никогда не меняется и ее никто не трогает, кроме разработчиков, которые непосредственно этим занимаются.
Возможно, мое объяснение слишком сложное ... подумайте об этом как о Spring PropertyPlaceholderConfigurer и примените его к конфигурации log4j :)
Это немного кодирования, но оно действительно простое и решает множество проблем в будущем.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].