无法使用 log4j 2.0 生成 datanucleus 日志

Unable to generate logs of datanucleus using log4j 2.0

我正在使用 Log4j 2 和 datanucleus 的 4.0.4 版本。 当我 运行 我的应用程序时,它无法生成 datanucleus 日志。 Datanucleus 日志与 Log4j-1.x 一起工作正常,但是当我将 Log4j-1.x 切换到 2.x 时,我无法生成 datanucleus 日志。

Log4j2 XML 是:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="FATAL" name="TestApp" packages="" monitorInterval="60">
  <Appenders>
    <RollingFile name="datanucleus" 
      fileName="/Test/logs/datanucleus-${sys:logging.log4j}.log"
      filePattern="/Test/logs/logs/$${date:yyyy-MM-dd}/datanucleus-${sys:logging.log4j}-%d{yyyy-MM-dd-HH}.log.gz"
      ignoreExceptions="false">
      <PatternLayout>
        <Pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %C %M:%L - %m%n</Pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy interval="24" modulate="true" />
    </RollingFile>

    <Console name="STDOUT" target="SYSTEM_OUT" ignoreExceptions="false">
      <PatternLayout pattern="%m%n" />
    </Console>
    <Failover name="Failover" primary="RollingFile">
      <Failovers>
        <AppenderRef ref="STDOUT" />
      </Failovers>
    </Failover>
  </Appenders>
  <Loggers>
    <Logger name="DataNucleus.Datastore" level="debug" additivity="false">
      <AppenderRef ref="datanucleus" />
    </Logger>
    <Logger name="DataNucleus.Cache" level="debug" additivity="false">
      <AppenderRef ref="datanucleus" />
    </Logger>
    <Logger name="DataNucleus.Persistence" level="debug" additivity="false">
      <AppenderRef ref="datanucleus" />
    </Logger>
    <Logger name="DataNucleus.Connection" level="debug" additivity="false">
      <AppenderRef ref="datanucleus" />
    </Logger>
    <Logger name="DataNucleus.Transaction" level="debug" additivity="false">
      <AppenderRef ref="datanucleus" />
    </Logger>
    <Logger name="DataNucleus.Lifecycle" level="debug" additivity="false">
      <AppenderRef ref="datanucleus" />
    </Logger>
    <Logger name="DataNucleus.MetaData" level="debug" additivity="false">
      <AppenderRef ref="datanucleus" />
    </Logger>
    <Logger name="org.datanucleus" level="debug" additivity="false">
      <AppenderRef ref="datanucleus" />
    </Logger>
    <Root level="debug">
      <AppenderRef ref="STDOUT" />
    </Root>
  </Loggers>
</Configuration>

请帮我解决这个问题..

使用 Log4j 1.2 它对我有用,但是当我尝试使用 Log4j 2.3 时,会生成除 DataNucleus 日志之外的其他日志。这是我的依赖项:

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>2.3</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.3</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-slf4j-impl</artifactId>
  <version>2.3</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-web</artifactId>
  <version>2.3</version>
</dependency>

首先要尝试的是打开 Log4j 2 内部调试。您可以通过将配置文件开头的 <Configuration status="FATAL" ... 替换为 <Configuration status="TRACE"... 来实现。这将向控制台显示 Log4j 2 内部调试消息。如果您在此处看到任何错误,它可能会帮助您解决问题。

一个常见的问题是依赖性。您的应用程序是否使用 Log4j-1.2 API?如果是这样,您需要将 log4j-1.2-api-2.3.jar 桥添加到您的依赖项中。该桥会将您的应用程序对 log4j-1.2 的所有调用路由到 Log4j 2 实现。

最后,确保从类路径中删除 log4j-1.2.x.jar

如果您在将 Log4j2 与 datanucleus 结合使用时遇到问题,那是因为 datanucleus 使用旧版 org.apache.log4j.Logger api 。要同时使用 log4j2 和 log4j 1.x,您需要使用桥接方法。 configuring-log4j2-and-log4j-using-a-single-log4j2-xml-file