- Различие между общим журналом, log4j, slf4j и JCL. Насколько я понимаю, slf4j является оберткой, в то время как commons-logging и log4j являются реальными реализациями. Я не знаю, куда вписывается JCL.
Jakarta Commons Logging ( JCL ) и Simple Logging Facade для Java SLF4J оба являются абстракциями для различных каркасов ведения журналов например. java.util.logging, log4j и logback, позволяющие конечному пользователю подключить желаемую инфраструктуру ведения журналов во время развертывания . Известно, что Commons Logging страдает проблемами загрузчика классов, которые SLF4J пытается решить (SLF4J, как известно, более чистая библиотека).
С учетом вышесказанного фактом является то, что Spring использует API ведения журнала Jakarta Commons (см. Зависимости ведения журнала в Spring ): Spring компилируется с JCL, и Spring делает объекты JCL Log
доступными для классов, расширяющих Spring. , Фактически это единственная обязательная внешняя зависимость в Spring. Этот выбор был сделан , потому что многие другие фреймворки также используют его (например, Struts). Идея заключалась в том, чтобы избежать создания нескольких библиотек фасадов при создании приложений («A» для Spring, «B» для Struts и т. Д.). Тем не менее, возможно заменить JCL на SLF4J, если вы хотите (SFL4J обеспечивает привязки к каркасу логирования, но также и мост "JCL to SLF4J"). См. Упомянутый пост Ведение журнала зависимостей весной для всех деталей.
- Как настроить ведение журнала для 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
(это просто еще один формат для конфигурации) в classpath.
- Я использую 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 использует его. Для этого следуйте инструкциям, указанным в первом абзаце. И я бы использовал logback в качестве каркаса логов (который является преемником log4j), вот где сейчас все и происходит.