2017-01-22 4 views
1

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

  • log4j 2,7;
  • springframework 4.3.5;
  • спящий режим 5.2.3.

Я настраиваю log4j через XML-файл.
Для этого я создал несколько добавлений, один из которых называется «Общее». Что мне нужно, так это то, что все журналы должны поступать к этому приложению (включая те, которые сгенерированы с помощью springframework или hibernate), и что ни одна из них не печатается на консоли (мне все еще нужен другой журнал из других классов).
Я пытался писать эти Лесорубы:

<Loggers> 
    <Logger name="org" level="ALL" /> 
    <Root level="ALL" additivity="false"> 
     <AppenderRef ref="General"/> 
    </Root> 
    <Logger name="tests" level="ALL" additivity="false"> 
     <AppenderRef ref="console"/> 
     <AppenderRef ref="General"/> 
    </Logger> 
</Loggers> 

Дело в том, что в то время как все пакеты, но springframework правильно входа через этот Appender, springframework все еще входит в консоль и не написать ни одной строчки через Appender «General». Как я могу это исправить?

EDIT: я узнал, что это может быть связано с тем, что springframework кажется войти, используя другие библиотеки (Logback, SLF4J и подобные). Я также читал, что springboot можно настроить на использование log4j, и, поскольку я до сих пор мало знаю о Spring и его библиотеках, я не знаю, как получить результат, который я хочу.

+0

Я не уверен, что элементы log4j XML капитализируется (например, 'logger', не' logger'), также есть тир в ' ' –

+0

@fabienbk, с этой точки зрения все работает нормально, как вы можете видеть здесь (http://logging.apache.org/log4j/2.x/manual/appenders.html). Дело в том, что только одна библиотека, похоже, не видит моих конфигураций, а другая делает. – SamCle88

+0

О, мой плохой! это log4j 2. Какую запись в журнале вы наблюдали с весны, в консоли? –

ответ

1

Когда вы определяете org logger, вам необходимо передать refender app в этом регистраторе Надейтесь, что это сработает.

<Logger name="org" level="ALL" > 
<AppenderRef ref="General"/> 
</Logger> 

Spring по умолчанию Commons Logging library. Вам нужно отключить его, а вместо этого использовать библиотеку lg4j. Вам нужно исключить зависимость от общего доступа.

<dependencies> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.0.0.RELEASE</version> 
     <scope>runtime</scope> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
</dependencies> 

Вам нужно положить Log4j на пути к классам, и предоставить ему log4j.xml то есть конфигурационный файл в корне классам. И добавьте следующую зависимость в свой pom.xml.

<dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.14</version> 
     <scope>runtime</scope> 
    </dependency> 

Ссылка - http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#overview-not-using-commons-logging

+0

К сожалению, он ничего не решил. Я добавил несколько подробностей в мой вопрос. Я боюсь, что если «org.springframework. *» Прошел через эти конфигурации для ведения журнала, корневой регистратор поймал бы сам, без необходимости в других Loggers. – SamCle88

+0

Spring по умолчанию Commons Logging library. Вам нужно отключить его, а вместо этого использовать библиотеку lg4j. – shubham

+0

Как я могу это сделать? – SamCle88

0

В конце концов, я в конечном итоге, просто добавив эти зависимости от ПОМ.

<dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.12</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-jcl</artifactId> 
     <version>2.7</version> 
    </dependency> 

и удаление регистратора

<Logger name="org" level="ALL" />