【问题标题】:No way to avoid SLF4J error in maven无法避免 Maven 中的 SLF4J 错误
【发布时间】:2014-05-22 22:34:47
【问题描述】:

我知道以前有人问过这个问题,但没有一个答案对我有用。我得到了错误:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

我已经尝试过使用:

对于我尝试过的每个教程/答案版本和最新版本 (mvn versions:use-latest-version)

由于那里有一些答案告诉您在类路径中只能有其中一个库,因此我说我已经尝试过它们。

我还在src/main/resources/ 中使用了log4j.properties,就像这样:

# Set root logger level and appender name.
log4j.rootLogger = ALL, file

# Specify appenders.
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender

# Configure console appender.
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} [%t] %-5p %m%n

# Configure file appender.
log4j.appender.file.File = /webapp/logs/web.log
log4j.appender.file.DatePattern = '.'yyyy-MM-dd
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d{ABSOLUTE} [%t] %-5p %m%n

还有一个logback.xml 在同一个地方:

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

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>silkroad.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.base22" level="ALL"/>

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

这是我尝试过的代码:

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

public class Test {

    static Logger log = LoggerFactory.getLogger(Test.class);

    public static void main(String[] args) {
        log.debug("Testing the log");

    } 
}

从我使用的登录依赖中分离出来:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

我已经学习了几个教程 (12~15),使用不同的方式让日志外观工作,包括在他们的网站上没有成功的教程。

【问题讨论】:

    标签: maven logging tomcat7 slf4j logback


    【解决方案1】:

    此配置适用于我的项目。我正在使用 log4j 1,一个标准的 log4j.xml 文件。我还必须从包含它的任何依赖项中排除 commons-logging,例如spring-core 如图所示。

        <properties>
            <spring.version>4.0.0.RELEASE</spring.version>
            <log4j.version>1.2.17</log4j.version>
            <slf4j.version>1.7.5</slf4j.version>
        </properties>
    
        <dependencies>
             <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            ....
        </dependencies>
    

    【讨论】:

    • 请参阅答案中的&lt;properties&gt; 部分。
    • 谢谢。无论如何,它既不适用于你的也不适用于最新的 slf4 版本(1.7.7)
    • 您是否确保没有其他日志依赖项(包括 commons-logging 和其他 slf4j 工件)被传递?
    • 您是将应用部署到 Web 容器,还是独立的测试应用?
    • 这是一个网络应用程序。我使用mvn tomcat7:deploy. It packages a .war`文件将它部署到Tomcat。
    猜你喜欢
    • 2020-02-29
    • 2012-09-19
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 2016-02-22
    • 2015-09-16
    相关资源
    最近更新 更多