首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Log4j到slf4j不拾取log4j2.xml

Log4j到slf4j不拾取log4j2.xml
EN

Stack Overflow用户
提问于 2020-11-03 14:25:11
回答 1查看 873关注 0票数 2

尝试将一个自由应用程序部署到OCP,并将该自由日志与应用程序日志合并为以下示例:https://openliberty.io/blog/2020/05/19/log4j-openshift-container-platform.html

我们的应用程序使用LOG4J2配置和运行日志记录。到目前为止,这对于下面的依赖项是有效的。

代码语言:javascript
复制
    <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文件位于何处

代码语言:javascript
复制
Configurator.initialize(null, log4jConfigUrlFile);

我们的日志记录在日志文件中,一切都很好。然而,现在我们需要一些方法来使用Log4J2来配置我们的记录器,但是日志本身必须在7月结束,以便OCP和它们的EFK堆栈可以使用它。

我一直在尝试下面的依赖项。

代码语言:javascript
复制
<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 14中的一个,也许这是一个问题。我们也不能再使用Configurator了,因为它是log4j核心的一部分,您不能在同一个类路径上有两个实现(log4j到slf4j)。

我还尝试设置logfile位置属性。

代码语言:javascript
复制
-Dlog4j.configurationFile=./resources/log4j/log4j2.xml

我尝试了几个目录结构的排列,只是为了确保它不起作用。也试过以下几种方法。

代码语言:javascript
复制
-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE

只是为了获得更多的调试输出,但它甚至没有工作。还有什么我可以试试的吗?

我的最终目标是

通过log4j2.xml

  • Have日志方式配置日志记录,
  • 最终在控制台

中以java.util.logging的形式结束。

EN

Stack Overflow用户

回答已采纳

发布于 2020-11-04 15:40:32

不幸的是,我相信如果使用log4j到slf4j适配器,log4j2.xml配置将被忽略。在server.xml中的服务器端,必须更改任何日志记录配置。在基于日志级别筛选日志的情况下,可以使用consoleLogLevel属性。在您的bootstrap.properties文件中:

代码语言:javascript
复制
com.ibm.ws.logging.console.log.level=<log level>

或者在您的server.xml文件中:

代码语言:javascript
复制
<logging consoleLogLevel="<log level>" />

或者在服务器环境中:

代码语言:javascript
复制
WLP_LOGGING_CONSOLE_LOGLEVEL=<log level>

日志级别的有效选项包括审核、错误、信息、关闭、警告。有关如何在Open中配置日志记录的详细信息,请参阅https://openliberty.io/docs/20.0.0.11/reference/config/logging.html。或者,您可以使用博客中声明的其他选项将日志发送到OCP。

编辑:您可以做的另一个选择是使用控制台附录来代替。您可以将应用程序日志以非json格式直接发送到控制台。如果您希望在JSON中保留log4j 2应用程序日志,也可以使用appsWriteJson日志属性将您的JSON应用程序日志直接发送到System.out/err。

bootstrap.properties:

代码语言:javascript
复制
com.ibm.ws.logging.apps.write.json=true

server.xml

代码语言:javascript
复制
<logging appsWriteJson="true"/>

服务器环境:

代码语言:javascript
复制
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的更多信息

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64664702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档