2014-10-07 5 views
0

В моем приложении я использую SLF4J как вход фасада с несколькими креплениями, присутствующими вSLF4J решить несколько привязок

  1. SLF4J-простой-1.6.2.jar
  2. Logback-классический 1.0.4. Jar

Оба они определены в pom.xml, как

**<!--MANDATORY -->** 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.6.2</version> 
    </dependency> 

    **<!--SIMPLY DUMPS THE MESSAGE TO ERROR STREAM -->** 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-simple</artifactId> 
     <version>1.6.2</version> 
    </dependency> 

    **<!--logback : further configuration in logback.xml -->** 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-core</artifactId> 
     <version>1.0.4</version> 
    </dependency> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>1.0.4</version> 
    </dependency> 

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

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class TimePass { 
    private Logger log = LoggerFactory.getLogger(getClass()); 
    public static void main(String[] args) { 
     new TimePass().run(); 
    } 

    private void run() { 
     System.out.println(log); 
     log.info("WE ARE RUNNING"); 
     System.out.println("HIHIHIHI"); 
    } 

} 

Этот проект/webapp размещен в двух местах. Но когда я запускаю его на обоих, результаты поразительно отличаются.

On 1 instance, output is 

    SLF4J: Class path contains multiple SLF4J bindings. 
    SLF4J: Found binding in [jar:file:/home/hemant/.m2/repository/org/slf4j/slf4j-simple/1.6.2/slf4j-simple-1.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
    SLF4J: Found binding in [jar:file:/home/hemant/.m2/repository/ch/qos/logback/logback-classic/1.0.4/logback-classic-1.0.4.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
    0 [main] INFO com.expertly.bin.TimePass - WE ARE RUNNING 
    org.slf4j.impl.SimpleLogger(com.expertly.bin.TimePass) 
    HIHIHIHI 

В то время как с другой стороны, его

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/home/hemant/.m2/repository/ch/qos/logback/logback-classic/1.0.4/logback-classic-1.0.4.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home/hemant/.m2/repository/org/slf4j/slf4j-simple/1.6.2/slf4j-simple-1.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
14:58:18,760 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy] 
14:58:18,760 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] 
14:58:18,760 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/hemant/Project/Expertly/ee/workspace/branches/integration/target/ROOT/WEB-INF/classes/logback.xml] 
14:58:18,823 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set 
14:58:18,827 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.sift.SiftingAppender] 
14:58:18,831 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [SIFT] 
14:58:18,853 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.sift.MDCBasedDiscriminator] for [discriminator] property 
14:58:18,859 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender] 
14:58:18,862 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [FILE-HIBERNATE] 
14:58:18,868 |-ERROR in [email protected]:13 - no applicable action for [Encoding], current pattern is [[configuration][appender][Encoding]] 
14:58:18,897 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[FILE-HIBERNATE] - This appender no longer admits a layout as a sub-component, set an encoder instead. 
14:58:18,897 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[FILE-HIBERNATE] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder. 
14:58:18,897 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[FILE-HIBERNATE] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details 
14:58:18,905 |-INFO in [email protected] - Will use zip compression 
14:58:18,910 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-HIBERNATE] - Active log file name: catalina.base_IS_UNDEFINED/logs/hibernate.log 
14:58:18,910 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-HIBERNATE] - File property is set to [catalina.base_IS_UNDEFINED/logs/hibernate.log] 
14:58:18,911 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.net.SMTPAppender] 
14:58:18,918 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [EMAIL] 
14:58:18,937 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to ERROR 
14:58:18,937 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [EMAIL] to Logger[ROOT] 
14:58:18,937 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.type] to INFO 
14:58:18,937 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [org.hibernate.type] to false 
14:58:18,937 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [FILE-HIBERNATE] to Logger[org.hibernate.type] 
14:58:18,937 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate] to INFO 
14:58:18,938 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [org.hibernate] to false 
14:58:18,938 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [FILE-HIBERNATE] to Logger[org.hibernate] 
14:58:18,938 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG 
14:58:18,938 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [SIFT] to Logger[ROOT] 
14:58:18,938 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration. 
14:58:18,939 |-INFO in [email protected] - Registering current configuration as safe fallback point 

Logger[com.expertly.bin.TimePass] 
HIHIHIHI 

Проблема, кажется, в обоих случаях несколько привязок зачислялись, но в другом порядке.

** В случае 1: где вошедшего: 1. SLF4J-простой-1.6.2.jar 2. Logback-классическом 1.0.4.jar И использовали первое связывание для входа

В случае 2: ​​там, где он не регистрировался, порядок был противоположным, и поэтому он искал поиск logback.xml и не мог разрешить конкретные переменные webcontainer ($ {catalina.home}) **

Я не знать причину этого разворота.

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

Заранее спасибо.

ответ

2

Как объясняется в page pointed to in the error message, это не очень хорошая идея. Цитируя примечание с этой страницы:

Предупреждение, выданное SLF4J, является именно тем предупреждением. Даже если присутствуют множественные привязки, SLF4J выбирает одну структуру/реализацию журнала и связывается с ней. Способ SLF4J выбирает привязку, определяемую JVM, и для всех практических целей следует считать случайным. Начиная с версии 1.6.6, SLF4J назовет класс структуры/реализации, на который он фактически связан.

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