Экранированный системами регистрации Java с Spring и в спящем режиме

Когда развертывание моего Spring / В спящем режиме приложение, я связал соблюдающее предупреждение с входом:

log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.

Удивление мне было отсутствием информации от Google / ТАК поиск. Единственная релевантная вещь была этим, ТАК отправьте проблему с Входом палаты общин / установка Log4j в пружинном веб-приложении с котом 6

Однако это даже вне меня. Может кто-то разъяснять системы регистрации в игре здесь или указывать на меня на НЕДАВНИЙ ресурс по вопросу (существуют некоторые древние результаты поиска Google, которые действительно не применяются). А именно, проблемы, с которыми я борюсь:

  • Различие среди входа свободного городского населения, log4j, slf4j и JCL. Мое понимание - то, что slf4j является оберткой, в то время как вход свободного городского населения и log4j являются фактической реализацией. Я не знаю, где JCL вписывается.

  • Как настроить вход для Spring. Что делает в файле web.xml, мне нужны log4j.properties файл или файл log4j.xml? Куда это идет в СЕТИ-INF? Что-нибудь входит в мой файл applicationContext.xml? (извините, но я должен запустить с нуля здесь).

  • Я использую, в спящем режиме в моем проекте и включая через Знатока. Кажется, что В спящем режиме slf4j-простое использование. Я видел предупреждения говорить, что я не могу иметь slf4j-простой и slf4j-log4j оба на пути к классу. Я не включал slf4j-log4j как зависимость, но В спящем режиме, должен включать его. Как я решаю эту проблему? Могу я вызывать Быть в спящем режиме для использования log4j вместо этого?

Любая справка значительно ценилась бы.Спасибо.


править:

Спасибо за все ответы до сих пор. Я даю этим предложениям попытку. Что относительно пружинного веб-приложения конкретно? Я видел примеры слушателей и параметров и этажерки, помещенной в файл web.xml. Это также требуется?

15
задан Community 23 May 2017 в 12:10
поделиться

5 ответов

  • commons-logging и SLF4J являются обёртками API вокруг других реализаций протоколирования. SLF4J является более современным из них, и, скорее, более способным. Log4j - это реализация протоколирования, и практически стандарт де-факто. JUL (сокращение от java.util.log) - это (вообще ужасная) реализация протоколирования, которая идет вместе с JRE. Другая лог-реализация - logback, которая медленно набирает тягу, но еще не получила широкого распространения.
  • log4j.properties и log4j.xml являются различными способами настройки log4j, оба они одинаково эффективны. Какой из них вы используете, зависит от вас, хотя некоторые серверы приложений диктуют тот или иной. Прочтите log4j manual, чтобы узнать, как это настроить.
  • Если Hibernate использует SLF4J в качестве своего API, то это выбор разработчиков Hibernate. Однако, вы можете выбрать, какую журнальную реализацию SLF4J будет делегировать. Снова прочтите руководство slf4j , чтобы узнать, как выбрать выбранную вами реализацию.

Да, все это довольно запутанно. Учитывая открытый выбор, SLF4J и Logback являются наиболее подходящей комбинацией, но обычно вы не получаете открытого выбора. Различные фреймворки (такие как Hibernate и Spring) потенциально будут использовать различные API для ведения логов, обычно общие - logging или SLF4J, но Вы можете заставить все эти API в конечном итоге зарегистрироваться в одной и той же базовой реализации (обычно log4j).

12
ответ дан 1 December 2019 в 03:52
поделиться

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

log4j.logger.BillReview=INFO,BillReviewLog
log4j.appender.BillReviewLog=org.apache.log4j.RollingFileAppender
log4j.appender.BillReviewLog.File=BillReview.log
log4j.appender.BillReviewLog.Append=true
log4j.appender.BillReviewLog.MaxFileSize=5000KB
log4j.appender.BillReviewLog.MaxBackupIndex=5
log4j.appender.BillReviewLog.layout=org.apache.log4j.PatternLayout
log4j.appender.BillReviewLog.layout.ConversionPattern=%c %p %-10.10X{server} %-4.4X{user} %d{ISO8601} %m%n

поместите это в файл log4j.properties, измените все ссылки на «BillReview» для чего-то более похожи на ваш проект, и это будет войти в файл и остановить их Сообщения.

Ваши вопросы, касающиеся кадра ведения журнала в основном личным выбором. Log4j - это старый стандарт, и он работает нормально, регистрация Commons и SLF4J - более новые API и позволяют некоторые более сложные случаи использования.

2
ответ дан 1 December 2019 в 03:52
поделиться

Я позволю нескольким опытным гуру, чем я отвечаю на первую пулю.

Отвечая на вторую пулю ...

Вы можете использовать либо файл log4j.properties, либо log4j.xml (не имеет значения, который не имеет значения, какой). Что бы вы ни выбирали, вы должны добавить его в свой класс (обычно он должен идти в том же каталоге, что и ваш исходный код). Если вы используете Spring, хороший способ разбить ваш каталог SRC в логические порции, используя следующую структуру каталога ...

SRC / Main / Java - поставить главный источник здесь
SRC / Главная / Ресурсы - Положите ресурсы, используемые вами основной Источник здесь
SRC / Test / Java - поставить исходный код здесь (для тестов)
SRC / Test / Resources - поставьте ресурсы для тестов здесь

Вы, следовательно, поместите свой log4j.properties в каталоге SRC / Test / Resources.

Отвечая на третью пулю ...

Вы можете исключить зависимость в зависимости в вашем файле POM.XML, выполнив следующие ...

<dependency>
    <groupId>org.apache.xbean</groupId>
    <artifactId>xbean-spring</artifactId>
    <version>${xbean.version}</version>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
1
ответ дан 1 December 2019 в 03:52
поделиться
  • Различие между общим журналом, log4j, slf4j и JCL. Насколько я понимаю, slf4j - это оболочка, а commons-logging и log4j - фактические реализации. Я не знаю, где подходит JCL.

Jakarta Commons Logging ( JCL ) и Simple Logging Facade для Java SLF4J являются абстракциями для различных каркасы регистрации например java.util.logging, log4j и logback, позволяя конечному пользователю подключить желаемую структуру ведения журнала во время развертывания . Ведение журнала Commons, как известно, страдает от проблем с загрузчиком классов, которые SLF4J пытается решить (известно, что SLF4J является более чистой библиотекой).

Тем не менее, Spring использует Jakarta Commons Logging API (см. Регистрация зависимостей в Spring ): Spring компилируется с JCL, а Spring делает объекты JCL Log доступными для классы, расширяющие Spring.Фактически, это единственная обязательная внешняя зависимость в Spring. Этот выбор был сделан , потому что многие другие фреймворки также используют его (например, Struts). Идея заключалась в том, чтобы избежать наличия нескольких библиотек фасадов на пути к классам при создании приложений («A» для Spring, «B» для Struts и т. Д.). Однако можно заменить JCL на SLF4J, если вы хотите (SFL4J обеспечивает привязки к фреймворкам журналирования, а также мост «JCL к SLF4J»). См. Упомянутый пост Регистрация зависимостей в Spring для получения всех подробностей.

  • Как настроить ведение журнала для Spring. Что делает файл web.xml, нужен ли мне файл log4j.properties или файл log4j.xml? Куда он идет, в WEB-INF? Что-нибудь входит в мой файл applicationContext.xml? (извините, но здесь мне нужно начать с нуля).

Чтобы войти в систему, вы должны 1. решить, какую реализацию вы хотите использовать (java.util.logging, log4j или logback), 2. при необходимости поместить выбранную реализацию в путь к классам (java.util.logging находится в Java SE, поэтому он не требует дополнительных библиотек) и 3. для его настройки (путем размещения файла конфигурации в пути к классам). Если вы решите использовать log4j, просто добавьте его jar и log4j.properties или более интересный (но более подробный) log4j.xml (это просто еще один формат конфигурации) к пути к классам.

  • Я использую Hibernate в своем проекте, в том числе через Maven. Похоже, что Hibernate использует slf4j-simple. Я видел предупреждения о том, что у меня не может быть slf4j-simple и slf4j-log4j в пути к классам.Я не включил slf4j-log4j в качестве зависимости, но Hibernate должен включать его. Как мне решить эту проблему? Могу ли я заставить Hibernate использовать вместо этого log4j?

Hibernate использует Simple Logging Facade для Java (SLF4J) и, действительно, у вас не может быть нескольких привязок (например, slf4j-simple .jar и slf4j-logj12.jar ) в пути к классам одновременно. Здесь вы, скорее всего, получите slf4j-simple.jar транзитивно из другой зависимости. Чтобы решить эту проблему, запустите mvn dependency: tree , чтобы выяснить, откуда он исходит, и при необходимости исключить его.

И, кстати, в вашем случае я бы настроил Spring на использование SLF4J, поскольку Hibernate использует его. Для этого следуйте инструкциям по ссылке, указанной в первом абзаце. И я бы использовал логбэк в качестве фреймворка логирования (который является преемником log4j), вот где сейчас что-то происходит.

4
ответ дан 1 December 2019 в 03:52
поделиться

У меня были проблемы в той же области при выполнении моих тестов. В конце концов я заметил, что junit вводит slf4j-nop в качестве зависимости в дополнение к slf4j-log4j12 , который я хотел.Как только я исключил slf4j-nop , он начал работать.

0
ответ дан 1 December 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: