Подтвердить что ты не робот

Как использовать log4j 2.0 и slf4j и Commons Logging together

В настоящее время я запускаю новый Webapp (работает на tomcat 6) У меня есть компоненты, использующие slf4j и компоненты, используя ведение журнала сообщества Я планирую использовать log4j 2.0 в качестве реализации журнала из-за нескольких причин (в основном для приложений: SocketAppender и SyslogAppender, но также из-за расширенной перезагрузки конфигурации без потери событий журнала)

Теперь мои вопросы: - В каком интерфейсе я программирую свои новые классы? loag4j или slf4j? или даже ведение журнала сообщества?

  • Какой предпочтительный способ развернуть банки? положить их в мою заявку на войну или поместить их в файлы tomcat?

  • какие ящики нужно развернуть? log4j (включая привязки slf4j и commons), запись в сообществах (slf4j-api-1.7.2.jar) и slf4j api (slf4j-api-1.7.2.jar)

4b9b3361

Ответ 1

В какой интерфейс я программирую свои новые классы? loag4j или slf4j?

Если вы собираетесь использовать SLF4J, перейдите к этому интерфейсу. Он обеспечивает максимальную гибкость для основной реализации протоколирования. Точка slf4j должна быть интерфейсом, который вы можете запрограммировать, поэтому в будущем, если вы решите переключиться на, скажем, logback, вам не придется переписывать свой код.

Какой предпочтительный способ развернуть банки? положить их в мою заявку на войну или поместить их в файлы tomcat?

Поместите их в свою ВОЙНУ.

Единственная причина (imo) поместить JAR в каталог libs Tomcat - это если им нужно загрузить собственную библиотеку. Поскольку Java не позволит вам загружать одну и ту же родную библиотеку из двух разных загрузчиков классов, вам необходимо поместить ее в общую папку. Но это не применимо здесь.

Некоторые люди считают каталог lib как способ сэкономить место. Это могло быть действительно, когда машины "server-class" имели 1 ГБ ОЗУ, но это уже не так. И избежание lib означает, что вы избегаете большинства проблем с загрузкой проблем с отладки.

какие ящики нужно развернуть?

  • slf4j-api - это базовый API
  • slf4j-log4j12 направляет фактический вход в Log4J
  • jcl-over-slf4j перехватывает ведение журнала Commons и маршрутизирует его через SLF4J (в Log4J)
  • log4j будет вашей физической структурой ведения журнала

Я предполагаю, что у вас уже есть конфигурация для Log4J и/или удобна запись этой конфигурации. Если нет, и все, о чем вы заботитесь, имеет дело с кодом, который использует Log4J внутри, там log4j-over-slf4j, который будет перехватывать вызовы Log4J. Затем вам нужно выбрать фреймворк, например, Logback.

(примечание: я изначально добавлял ссылки на все эти пакеты, но не имел достаточного количества сообщений, чтобы опубликовать их. Таким образом здесь ссылка на репозиторий Maven со всеми выделенными пакетами SLF4J)

Ответ 2

Я использую slf4j с log4j2 и используя

slf4j-api-1.7.12.jar
log4j-api-2.2.jar
log4j-core-2.2.jar
log4j-slf4j-impl-2.2.jar
jcl-over-slf4j-1.7.12.jar(get rid of commons logging jars)

если ваш сервер приложений имеет конфликтующие версии, вам может потребоваться переопределить использование определенных параметров загрузчика класса для поставщика

например. в weblogic 12 c У меня это есть в моем weblogic.xml внутри src/main/webapp/WEB-INF

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app 
xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd 
http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.5/weblogic-web-app.xsd">
<container-descriptor>
    <prefer-application-packages>
        <package-name>org.apache.log4j.*</package-name>
        <package-name>org.apache.commons.logging.*</package-name>
        <package-name>org.apache.commons.lang.*</package-name>
        <package-name>org.apache.commons.io.*</package-name>
        <package-name>org.apache.commons.collections4.*</package-name>
        <package-name>org.slf4j.*</package-name>
    </prefer-application-packages>
</container-descriptor>
<jsp-descriptor>
    <keepgenerated>true</keepgenerated>
    <debug>true</debug>
</jsp-descriptor>
<context-root>/cnfg</context-root>
</weblogic-web-app>

Ответ 3

Обратите внимание, что я не использовал Log4J 2.0, хотя я использовал SLF4J с Log4J 1.2. С учетом сказанного я бы ответил на ваши вопросы следующим образом:

  • Программа для SLF4J. У этого есть хороший, простой API, который - все, что вам, вероятно, понадобится из фреймворка регистрации. Кроме того, если вы по какой-то причине решили переключиться на logback или Log4J 1.2 или что-то другое вместо Log4J 2.0, вы можете просто отключить банки на сервере.
  • Определенно положить банки в войну приложения. Вы почти никогда не должны помещать банки в каталог сервера приложений lib. В противном случае они затронут все веб-приложения на этом сервере приложений, а не только ваши. Кроме того, банками в каталоге сервера приложений lib нельзя управлять, развертывая webapps, но их нужно управлять вручную.
  • Похоже, вам понадобится slf4j-api-1.7.2.jar, log4j-to-slf4j-2.0-beta4.jar, log4j-2.0-beta4.jar и log4j-core-2.0-beta4.jar, наряду с любыми зависимостями. Я уверен, что Maven будет использовать необходимые зависимости, если вы используете это.