2016-07-15 4 views
1

Если я добавить Logback и SLF4J к проекту моей Spring MVC (версия 4.1.0) путем добавления зависимостей Maven следующим образом:Spring + Logback (SLF4J) каротаж без JCL-над-SLF4J

  <dependency> 
       <groupId>org.slf4j</groupId> 
       <artifactId>jcl-over-slf4j</artifactId> 
       <version>1.7.21</version> 
       <scope>runtime</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-api</artifactId> 
       <version>1.7.21</version> 
       <scope>compile</scope> 
      </dependency> 
      <dependency> 
       <groupId>ch.qos.logback</groupId> 
       <artifactId>logback-classic</artifactId> 
       <version>1.1.7</version> 
       <scope>runtime</scope> 
      </dependency> 

и исключить обыкновенные -logging зависимость, то я получаю в лог-файл, в дополнение к журналам приложений, некоторые весенние события уровня INFO как:

[RMI TCP Connection(4)-127.0.0.1][org.springframework.web.context.ContextLoader] - Root WebApplicationContext: initialization started 

Если я добавить зависимости без JCL-над-SLF4J, и без учета Викисклада входа в систему пОМ .xml, тогда я получаю только журналы приложений.

Это мой logback.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

    <property name="LOG_HOME" value="logs" /> 
    <property name="APP_NAME" value="App" /> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   
     <encoder> 
      <charset>UTF-8</charset> 
      <pattern>%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %logger{50} - %msg%n</pattern>    
     </encoder> 
    </appender> 

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <FileNamePattern>${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.log</FileNamePattern> 
      <MaxHistory>30</MaxHistory> 
     </rollingPolicy> 

     <encoder> 
      <charset>UTF-8</charset> 
      <pattern>%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %logger{50} - %msg%n</pattern>     
     </encoder> 

     <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
      <MaxFileSize>10MB</MaxFileSize> 
     </triggeringPolicy> 
    </appender> 

    <root level="INFO"> 
     <appender-ref ref="STDOUT" /> 
     <appender-ref ref="FILE" /> 
    </root> 

    <logger name="org.springframework" level="INFO" appender-ref="FILE"/> 
</configuration> 

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

Могу ли я настроить logback.xml для получения событий Standart весной журнал без JCL-мост?

ответ

1

Проверьте их docs, потому что есть много информаций с примерами. Но вам вопрос: Spring и JCL:

Обязательная регистрация зависимостей в Spring является Jakarta Commons Logging API (JCL). Мы компилируем против JCL, и мы также создаем объекты JCL Log , видимые для классов, расширяющих Spring Framework. Это важно для пользователей, что все версии Spring используют одну и ту же регистрацию : миграция проста, потому что обратная совместимость сохраняется даже в приложениях, расширяющих Spring. Мы делаем это , чтобы сделать один из модулей в Spring зависимым на Викисклада лесозаготовок (канонический реализация JCL), а затем сделать все остальные модули зависят от того во время компиляции. Если вы используете Maven, например, и интересно, где вы подхватили зависимость от Викисклада лесозаготовок, то с весны и, в частности от центрального модуля calledspring-ядра.

И о настройке Logback, здесь хорошая точка:

Более распространенный выбор среди пользователей SLF4J, который использует меньше шаг песка генерирует меньше зависимостей, чтобы связываться непосредственно с Logback. Этот удаляет дополнительный этап привязки, потому что Logback реализует SLF4J напрямую, поэтому вам нужно только зависеть от двух библиотек, а не от нуля. (jcl-over-slf4j и logback). Если вы сделаете это вы, возможно, также необходимо исключить зависимость SLF4J-апи от других внешних зависимостей (не Spring), потому что вы хотите только одну версию этого API на классам.

Смежные вопросы