尝试将 liberty 应用程序部署到 OCP 并将 liberty 日志记录与每个示例的应用程序日志记录合并:https://openliberty.io/blog/2020/05/19/log4j-openshift-container-platform.html
我们的应用程序使用 LOG4J2 来配置和运行日志记录。到目前为止,这适用于以下依赖项。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</dependency>
并使用以下代码行告诉应用程序 log4J2.xml 文件所在的位置
Configurator.initialize(null, log4jConfigUrlFile);
我们的日志记录最终保存在日志文件中,一切都很好。然而,现在我们需要某种方法来使用 Log4J2 来配置我们的记录器,但日志记录本身必须在 JUL 中结束,以便 OCP 及其 EFK 堆栈可以使用它。
我一直在尝试使用以下依赖项。
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
没有编译问题,程序启动,我看到控制台中出现日志记录。然而,当我尝试调整我们的 log4j2.xml (位于类路径上)并且例如不想看到它们仍然出现的信息消息时。看起来它没有加载或没有使用。我注意到的另一件事是 LoggingFactory 是 slf4j-jdk14 中的 LoggingFactory ,也许这是一个问题。我们也不能再使用配置器,因为它是 log4j-core 的一部分,并且您不能在同一个类路径上有两个实现(log4j-to-slf4j)。
我还尝试设置日志文件位置属性
-Dlog4j.configurationFile=./resources/log4j/log4j2.xml
我尝试了几种目录结构的排列,只是为了确定并且不起作用。还尝试了以下方法。
-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE
只是为了获得更多调试输出,但还没有发挥作用。还有其他我可以尝试的事情吗?
我的具体最终目标是
- 通过 log4j2.xml 配置日志记录
- 在控制台中将日志记录最终显示为 java.util.logging
最佳答案
不幸的是,我相信如果您使用 log4j-to-slf4j 适配器,log4j2.xml 配置将被忽略。必须在服务器端的 server.xml 中更改任何日志记录配置。如果根据日志级别过滤日志,您可以使用 consoleLogLevel 属性。 在 bootstrap.properties 文件中:
com.ibm.ws.logging.console.log.level=<log level>
或者在您的 server.xml 文件中:
<logging consoleLogLevel="<log level>" />
或者在您的服务器环境中:
WLP_LOGGING_CONSOLE_LOGLEVEL=<log level>
日志级别的有效选项包括 AUDIT、ERROR、INFO、OFF、WARNING。 请引用https://openliberty.io/docs/20.0.0.11/reference/config/logging.html有关如何在 Open Liberty 中配置日志记录的更多信息。 或者,您可以使用博客中所述的其他选项将日志发送到 OCP。
编辑: 您可以做的另一个选择是使用控制台附加程序。您可以将应用程序日志直接以非 json 格式发送到控制台。如果您希望以 JSON 格式保留 Liberty 日志记录并将 log4j 2 应用程序日志以 JSON 格式保存,您还可以使用 appsWriteJson 日志记录属性将 JSON 应用程序日志直接发送到 System.out/err。
bootstrap.properties:
com.ibm.ws.logging.apps.write.json=true
服务器.xml
<logging appsWriteJson="true"/>
服务器环境:
WLP_LOGGING_APPS_WRITE_JSON=true
控制台附加程序:https://logging.apache.org/log4j/2.x/manual/configuration.html#Appenders 有关 appsWriteJson 的更多信息: https://openliberty.io/blog/2020/07/30/json-logging-open-liberty-20008.html
关于java - log4j-to-slf4j 未获取 log4j2.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64664702/