代码之家  ›  专栏  ›  技术社区  ›  We are Borg

Spring:日志不能与log4j或logback一起使用

  •  2
  • We are Borg  · 技术社区  · 10 年前

    我正在开发一个SpringMVC应用程序,在这个应用程序中,我试图让日志再次工作。不幸的是,有时它刚刚停止工作,我不知道是什么原因造成的。我在网上尝试了一些建议,但都没用。有什么建议吗?

    波姆。xml格式:

    <packaging>war</packaging>
        <properties>
            <java-version>1.8</java-version>
            <org.springframework-version>4.1.6.RELEASE</org.springframework-version>
            <org.aspectj-version>1.7.4</org.aspectj-version>
            <org.slf4j-version>1.7.5</org.slf4j-version>
            <hibernate.version>4.3.9.Final</hibernate.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <springsecurity.version>4.0.1.RELEASE</springsecurity.version>
            <spring-platform.version>1.1.3.RELEASE</spring-platform.version>
            <jetty.version>9.2.9.v20150224</jetty.version>
        </properties>
    
        <parent>
            <groupId>io.spring.platform</groupId>
            <artifactId>platform-bom</artifactId>
            <version>1.1.3.RELEASE</version>
            <relativePath />
        </parent>
    
        <dependencies>
    
      <!-- Spring framework dependencies -->
    
            <dependency>
                <groupId>org.springframework.mobile</groupId>
                <artifactId>spring-mobile-device</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-redis</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
            </dependency>
    
            <!-- Spring security dependencies -->
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-config</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-taglibs</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-web</artifactId>
            </dependency>
    
    
        <!-- Logging -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.5</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>1.7.5</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.0.13</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.0.13</version>
                <scope>runtime</scope>
            </dependency>
    
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>apache-log4j-extras</artifactId>
                <version>1.1</version>
            </dependency>
    

    我有两个log4j。xml和logback。xml格式:

    日志4j。xml格式:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
    <log4j:configuration>
    
    
        <!-- Appenders -->
        <appender name="console" class="org.apache.log4j.ConsoleAppender">
            <param name="Target" value="System.out" />
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%-5p: %c - %m%n" />
            </layout>
        </appender>
      <logger name="org.cometd">
            <level value="debug"/>
        </logger>
        <!-- Root Logger -->
        <root>
            <priority value="OFF" />
            <appender-ref ref="console" />
        </root>
    
    </log4j:configuration>
    

    注销。xml格式:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>
    
    
        <logger name="org.cometd" level="debug"/>
        <logger name="com.tooltank.spring.chat.ChatServiceImpl" level="info"/>
    </configuration>
    

    在服务器启动期间,我得到以下信息:

    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/home/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/home//WEB-INF/lib/slf4j-log4j12-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    13:43:29,173 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
    13:43:29,173 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
    13:43:29,174 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/path/to/logback.xml]
    13:43:29,292 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
    13:43:29,298 |-ERROR in ch.qos.logback.core.joran.action.IncludeAction - Could not find resource corresponding to [org/springframework/boot/logging/logback/base.xml]
    SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
    13:43:29,299 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.cometd] to DEBUG
    13:43:29,299 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.tooltank.spring.chat.ChatServiceImpl] to INFO
    13:43:29,299 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
    13:43:29,300 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@59474a9e - Registering current configuration as safe fallback point
    

    我错过了什么?非常感谢。

    2 回复  |  直到 10 年前
        1
  •  2
  •   Joschi    10 年前

    您应该避免在一个应用程序中使用log4j和logback。如果类路径中有两个jar,类加载器将选择其中之一(有点随机..) 此日志语句表明:

    SLF4J: Class path contains multiple SLF4J bindings.
    

    如果您打算使用logback,则需要放置logback。应用程序类路径中的xml文件。来自文档:

    logback将尝试使用文件logback测试进行自我配置。xml或logback。如果在类路径中找到xml。

    您还可以查看此链接: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html#howto-configure-logback-for-logging

    编辑: 我想您还需要向控制台添加一个appender,例如:

      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
    

    然后将appender添加到记录器:

    <logger name="org.cometd" additivity="false">
        <level value="DEBUG" />
        <appender-ref ref="STDOUT" />
    </logger>
    

    顺致敬意,

        2
  •  0
  •   Udara Seneviratne    4 年前

    我也有同样的问题。 我把两者都混合了 <groupId>org.slf4j</groupId> & <groupId>ch.qos.logback</groupId> 依赖关系。 删除后 <组ID>组织:slf4j</组ID> 并且只保留 <组ID>ch.qos.logback</组ID> 日志开始写入。