我花了很多天试图用slf4j解决以下日志记录问题:

Class Sample {
....
private static final org.slf4j.Logger A = LoggerFactory.getLogger(Sample.class);

// A = LoggerFactory.getLogger(“FileLogger”)没有区别

private static final Logger B = Logger.getLogger("FileLogger");
...
}

Slf4j logger A always makes entries to stdout, never into the log file.

Log4j logger B works as expected, making all entries in the log file.

有没有办法/配置Slf4j logger可以使用相同的appender log4j使用?我无法升级到logback . 有人遇到过这个问题吗?

我确保所有必需的具有相同版本的slf4j库都在项目路径中:

  • org.slf4j.slf4j-api

  • org.slf4j.slf4j-log4j12

  • apache-log4j-extras:version - 1.2.17

log4j xml文件:

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
          <appender name="fileAppender" class="org.apache.log4j.rolling.RollingFileAppender">
 <param name="append" value="false"/>
        <param name="file" value="sample.log"/>
        <param name="datePattern" value="'.'yyyy-MM-dd" />
        <rollingPolicy class="rollingPolicy class="org.apache.log4j.rolling.FixedWindowRollingPolicy">
            <param name="FileNamePattern" value="sample.%i.log.gz"/>
            <param name="MaxIndex" value="5"/>
            <param name="MinIndex" value="1"/>
        </rollingPolicy>

        <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
            <param name="MaxFileSize" value="100"/>
        </triggeringPolicy>

        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{MMMdd HH:mm:ss,SSS} %-5p %c %t" />
        </layout>
            </appender>

            <logger name="FileLogger">
                <level value="INFO" />
                <appender-ref ref="fileAppender" />
            </logger>

            <root>
                <level value="INFO" />
            </root>

    </log4j:configuration>