如何解决log4j-to-slf4j无法获取log4j2.xml
尝试将自由应用程序部署到OCP,并按照以下示例将自由日志记录与应用程序日志合并: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中的那个,也许是一个问题。我们也不能再使用Configurator,因为它是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。 有关如何在Open Liberty中配置日志记录的更多信息,请参考https://openliberty.io/docs/20.0.0.11/reference/config/logging.html。 另外,您可以使用博客中所述的其他选项将日志发送到OCP。
编辑: 您可以做的另一种选择是使用控制台附加程序。您可以将应用程序日志直接以非json格式发送到控制台。如果要使Liberty保持JSON记录,而使log4j 2应用程序保持JSON记录,则还可以使用appsWriteJson记录属性将JSON应用程序记录直接发送到System.out / err。
bootstrap.properties:
com.ibm.ws.logging.apps.write.json=true
server.xml
<logging appsWriteJson="true"/>
服务器环境:
WLP_LOGGING_APPS_WRITE_JSON=true
控制台Appender: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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。