GlassFish 4, в pom.xml не работают никакие зависимости фреймворка логирования

Каждая библиотека весенних проектов mvc использует свою собственную платформу ведения журналов, а именно. log4j, slf4j, logback, jboss-logging, commons-logging и т. д., как указано ниже, с интеграцией maven.

pom.xml

<log4j.version>1.6.5</log4j.version>
<slf4j.version>1.7.16</slf4j.version>
<slf4j.log4j13.version>1.0.1</slf4j.log4j13.version>
<logback.version>1.1.2</logback.version>
<jboss.logging.version>3.3.0.Final</jboss.logging.version>
<commons.logging.version>1.2</commons.logging.version>

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-bom</artifactId>
      <version>2.5</version>
      <scope>import</scope>
      <type>pom</type>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
<dependency>
    <groupId>ant</groupId>
    <artifactId>ant-jakarta-log4j</artifactId>
    <version>1.6.1</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>${logback.version}</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j13</artifactId>
    <version>${slf4j.log4j13.version}</version>
</dependency>

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>  
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
</dependency>
</dependencies>

Вот серьезная ошибка, отображаемая при запуске проекта.

SLF4J: путь к классу содержит несколько привязок SLF4J.

SLF4J: обнаружена привязка в [jar: file: /WEB-INF/lib/log4j-slf4j-impl-2.5.jar! /Org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: обнаружена привязка в [jar: file: /WEB-INF/lib/logback-classic-1.1.2.jar! /Org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: обнаружена привязка в [jar: file: /WEB-INF/lib/slf4j-log4j12-1.7.12.jar! /Org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: обнаружена привязка в [jar: file: /WEB-INF/lib/slf4j-log4j13-1.0.1.jar! /Org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: фактическая привязка имеет тип [org.apache.logging.slf4j.Log4jLoggerFactory]

ОШИБКА StatusLogger Не найден файл конфигурации log4j2. Использование конфигурации по умолчанию: запись в консоль только ошибок.

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


person Vivaswan    schedule 27.04.2016    source источник


Ответы (1)


Обычно у вас будет несколько компонентов, каждый из которых использует разные API ведения журналов. Обычно вы хотите связать каждого из них с определенной реализацией ведения журнала. Например, Spring использует commons-logging, поэтому, чтобы направить его в Log4j 2, вы должны включить jar log4j-jcl. Аналогичным образом, чтобы направить SLF4J в Log4j 2, вы должны включить jar-файл log4j-slf4j-impl. Вы не должны включать файлы Logback, поскольку это еще одна реализация ведения журнала. В приведенном выше случае ошибки, которые вы получаете, показывают, что у вас есть привязка Log4j 2 SLF4J, logback, привязка log4j1.2 и привязка log4j 1.3 для SLF4J. У вас должен быть только один из них, поэтому удалите банки для тех, которые вы не хотите использовать.

Обратите внимание, что SLF4J сообщает вам, что он выбрал привязку Log4j 2, но затем вы получаете сообщение об ошибке от Log4j 2, информирующее вас о том, что он не может найти файл конфигурации - обычно это будет log4j2.xml.

person rgoers    schedule 27.04.2016
comment
Это артефакты, удаленные из pom.xml, и проект работает без серьезных ошибок, но необходимо проверить, где бы ни вызывается класс, будут ли работать исключенные фреймворки журналирования: ‹artifactId› ant-jakarta-log4j ‹/artifactId› ‹artifactId ›Slf4j-api ‹/artifactId› ‹artifactId› jcl-over-slf4j ‹/artifactId› ‹artifactId› logback-classic ‹/artifactId› ‹artifactId› slf4j-log4j13 ‹/artifactId› - person Vivaswan; 28.04.2016