当前位置: 首页 > 知识库问答 >
问题:

StatusLogger找到多个日志记录实现

陆卓
2023-03-14

在一个使用log4j和slf4j的应用程序中,我尝试使用依赖于log4j2的elasticsearch jar。

应用程序的日志依赖项如下所示-

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

应用程序使用自己的<code>log4j。xml并具有一些log4j的自定义附加器,因此如果不重写附加器,则无法将其迁移到log4j2。

根据elasticsearch文档中的建议,添加了以下依赖项,以使用不同于log4j2的记录器。

    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${es.version}</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>transport</artifactId>
        <version>${es.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-to-slf4j</artifactId>
        <version>2.11.1</version>
    </dependency>

但是现在在启动应用程序时,我看到了一些警告,如下所示

DEBUG StatusLogger org.slf4j.helpers.Log4jLoggerFactory is not on classpath. Good!
DEBUG StatusLogger Using ShutdownCallbackRegistry class org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry
WARN StatusLogger Multiple logging implementations found:
Factory: org.apache.logging.log4j.core.impl.Log4jContextFactory, Weighting: 10
Factory: org.apache.logging.slf4j.SLF4JLoggerContextFactory, Weighting: 15
Using factory: org.apache.logging.slf4j.SLF4JLoggerContextFactory

有人能告诉我这个警告是什么意思吗?我怎么才能删除它?

共有1个答案

安聪
2023-03-14

这已在log4j2邮件列表中得到回答

我想你想说的是

    < li >您的应用需要使用Log4J 1 . x。 < li >您正试图包含使用Log4J 2 api的内容。

您遇到的问题是您已经提供了2个Log4J api的实现 - log4j到slf4j和log4j核心。您只能拥有其中之一。您需要从声明为依赖项的任何内容中排除 Log4J 核心 jar。

另一方面,将Log4J 1附加程序转换为Log4J 2并不特别困难。Log4J 1已经很多年没有维护了,4年前被宣布报废。

拉尔夫

 类似资料:
  • 我试图实现log4j2,但它一直抛出以下错误。 我试过网上给出的解决方案。但这似乎对我不起作用。 这就是我试图运行的代码。 pom中添加的项目和依赖项。xml: 感谢您的帮助。

  • 我使用的是播放框架,其中日志是默认的记录器引擎。为了便于跟踪,我希望将两个不同的活动(和)记录在两个单独的文件中。为此,我有两个追加器和两个记录器。每个记录器都用特定的appender标记。 我希望通过事务记录器(如登录或注册相关活动(如 但不管用。有什么想法吗? 我所说的“不工作”是指相同的日志被附加到两个记录器中,而不是特定于特定的日志。例如。如果我从播放代码调用,事务和登录记录器都将用户X已

  • 我对java和类路径相当陌生。。 我有一个EJB项目,它在POM中依赖于log4j2。它在EAR中运行,因此是EAR POM中的EJBModule。我还有一个父POM,EAR和EJB项目都源自它。尝试使用LogManager检索记录器时,出现错误“StatusLogger无法使用SimpleLogger找到日志实现”。我的log4j2。xml文件位于EJB项目的src/main/resources

  • ,日志记录将进入一个文件; (路径)/service_name/service_name.log 我想用logback复制这种行为,但在logback.xml配置中获取“logger”名称时遇到了真正的困难。它可以在log encoder.pattern中看到,即“%d%-5level%logger{35}-%msg%n”。

  • 现在,问题是,当我以以下方式进行日志记录时: 尽管根记录器级别被设置为“错误”,但日志条目仍然存在于两个日志文件中。然而,当我去掉“it.pkg.testpkg.service”记录器(通过注释或删除它)时,条目停止进入根记录器。我不太清楚这是怎么回事。 目前,我已经找到了一个临时解决方案,方法是在“root_file_appender”中添加以下条目: 谢了。