0

自从我升级到 2.17.1 版本后,我开始面临问题,之前我的版本是 2.1 并且一切正常,因为我已经升级了版本日志没有生成到日志文件
我在我的 pom.xml 中有以下配置

    <groupId>org.slf4j</groupId>
              <artifactId>log4j-over-slf4j</artifactId>
              <version>2.0.0-alpha6</version>
            </dependency>
         <dependency>
              <groupId>org.apache.logging.log4j</groupId>
              <artifactId>log4j-slf4j-impl</artifactId>
              <version>2.17.1</version>
            </dependency>
        <dependency>
              <groupId>org.apache.logging.log4j</groupId>
              <artifactId>log4j-api</artifactId>
              <version>2.17.1</version>
            </dependency>
        
        
            <dependency>
              <groupId>org.apache.logging.log4j</groupId>
              <artifactId>log4j-core</artifactId>
              <version>2.17.1</version>
            </dependency>

我的 logback.xml 有以下内容:

    <?xml version="1.0" encoding="UTF-8"?>
            <Configuration status="warn" name="MyApp" packages="">
                <Appenders>
                    <RollingRandomAccessFile name="RollingRandomAccessFile" fileName="/lcc/lccapp/logs/lcc-publisher/producer.log"
                                             filePattern="/lcc/lccapp/logs/lcc-publisher/producer-%d{MM-dd-yyyy}-%i.zip" immediateFlush="false">
                        <PatternLayout>
                            <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
                        </PatternLayout>
                        <Policies>
                            <TimeBasedTriggeringPolicy interval="1" />
                        </Policies>
                        <DefaultRolloverStrategy max="100"/>
                    </RollingRandomAccessFile>
                </Appenders>
                <Loggers>
                    <Root level="info">
                        <AppenderRef ref="RollingRandomAccessFile"/>
                    </Root>
                </Loggers>
            </Configuration>

我在 boot.log 中看到的是:

    Starting the lcc-publisher application
    Application directory is /lcc/lccapp/apps/lcc-publisher
    SLF4J: No SLF4J providers were found.
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.
    SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions prior to 1.8.
    SLF4J: Ignoring binding found at [jar:file:/lcc/lccapp/apps/lcc-publisher/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#ignoredBindings for an explanation.
    Current dir using System:/lcc/lccapp/apps/tcc-publisher


    

应用程序运行没有任何问题,但日志没有写入日志文件。

4

1 回答 1

0

你看过这个页面吗? Log4j 2 SLF4J 绑定。从 Log4J 2.11.1 开始,Log4J 2 的 SLF4J 绑定有两个单独的实现,具体取决于您的 SLF4J 版本。

您使用log4j-over-slf4j版本2.0.0-alpha6意味着您的 SLF4J API 版本 ( slf4j-api) 也是2.0.0-alpha6。因此,根据上面的链接,您需要更改对log4j-slf4j-impltolog4j-slf4j18-impl的使用。

关于您正在使用的 SLF4J 版本的其他几件事:

  • 您确定要使用 SLF4J 2.x 而不是 1.x?他们发布 2.x 的事实意味着 API 中存在重大变化。所以我认为不能保证任何当前版本的 Log4J 都会兼容,特别是因为它还没有最终确定。2.0.0 仍在发布 alpha 版本。
  • 您确定要使用 SLF4J 的 alpha 版本而不是稳定版本吗?无论现在如何工作,下次有人升级您的 SLF4J 时它可能会损坏。

顺便说一句,log4j-slf4j-impl引入log4j-api传递,因此您不需要显式声明log4j-api为依赖项。这减少了您需要手动维护的一项,并且减少了<version></version>您需要担心保持同步的一项。

于 2022-02-11T01:01:54.233 回答