log4j несколько файлов конфигурации - PullRequest
9 голосов
/ 08 ноября 2011

У меня есть несколько проектов, встроенных в веб-приложение в виде банок.Каждый проект имеет файл log4j.properties.Когда веб-приложение развернуто, какой файл конфигурации используется и как переопределить конфигурации в файле log4j.xml в файле jar.Банки не являются веб-проектами.Они больше похожи на код уровня обслуживания.В каком порядке загружается файл log4j.properties в приведенном ниже сценарии

Web-project
   classes
      log4j.properties
   ProjectB.jar
      com
      log4j.properties
   ProjectC.jar
      com
      log4j.properties and so on. 

Ответы [ 2 ]

5 голосов
/ 08 ноября 2011

Если ваши банки являются отдельными веб-приложениями, каждое веб-приложение должно использовать то, которое оно сначала находит в пути к классам (WEB-INF / classes).

Вы можете передать параметр -Dlog4j.configuration = path_to_file внапример, запуск tomcat, чтобы убедиться, что он использует тот, который вы собираетесь использовать.Однако, насколько я понимаю, это будет то, что Tomcat будет использовать для каждого развернутого веб-приложения.

Вопрос в том, как вы развертываете свои приложения.Либо все веб-приложения в одном tomcat, в этом случае вы, вероятно, хотите, чтобы каждое веб-приложение использовало разные log4.properties (или log4j.xml), или в случае, когда вы указываете одно для tomcat, оно должно использовать указанное вами.

К чему это сводится, насколько я знаю: либо первый найденный в classpath (помните: у каждого веб-приложения есть свой собственный classpath), либо тот, который вы указываете с помощью параметра -D.

Только что нашел эту ссылку, которая, я думаю, хорошо обобщает основные концепции входа в tomcat и веб-приложений, развернутых в tomcat: http://wiki.apache.org/tomcat/FAQ/Logging

Если вам нужен еще больший контроль над ведением журнала log4j, вы можете прибегнуть к написанию кода log4jКонфигурация в Java.Однако это будет означать, что вам придется изменить исходный код и добавить в него код, который относится к инфраструктуре и связан с подробностями развертывания вашего приложения (не так приятно).

0 голосов
/ 01 марта 2014

Если в общих пакетах в ProjectA, ProjectB и WebProject вы установите аддитивность на false, ваш журнал не будет дублироваться.

log4j.additivity. [Зарегистрированный пакет] = false

Например:

log4j.properies -> Проект A, Проект B

log4j.additivity.org.spring.framework = false

Весь журнал org.spring.framework будет поступать из WebProject, игнорируя ProjectA и ProjectB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...