将所有 Wildfly 日志重定向到应用程序设置的 Log4j2 或仅使用一个日志管理器

问题描述 投票:0回答:1

我正在使用 Apache 和 Weld 依赖项将使用 Primefaces 8 编写的旧 Web 应用程序(war)迁移到使用 WildFly 31.0.1.Final 的 Jakarta EE 10 和 Primefaces 13.0.4。

到目前为止已经成功了,所有的bean都更改为使用新的注释,并且需要进行一些接口更改。但我看到日志很乱。

我已在 WEB 应用程序(.war 文件)中成功配置 Log4j2。所有应用程序日志都像旧应用程序一样写入特定文件,但我在 WildFly 独立日志和 Eclipse 控制台中看到我的 Log4j2 日志被写入“内部”WildFly 日志。

由于我只想使用一个日志管理器(不是一个用于应用程序,另一个用于应用程序服务器),所以我有 3 个问题:

  1. 是否可以将所有 WildFly 应用程序服务器日志重定向到我的应用程序 Log4j2 配置的日志,绕过或忽略默认的 WildFly 日志管理器?是否可以通过 Java 代码或额外的 XML/属性文件实现?
  2. 如果上述 1 不可行,我如何使用默认的 WildFly 应用服务器日志?我尝试使用 java.util.logging 类,但它们不会在控制台中或独立日志文件中写入任何内容。
  3. 为了保持理智:使用 WildFly 时记录应用程序消息的最佳实践是什么?

这是我提到的“日志中的日志”的示例:

WildFly 独立日志(控制台和文件)

15:39:34,029 INFO  [org.primefaces.webapp.PostConstructApplicationEventListener] (ServerService Thread Pool -- 96) Running on PrimeFaces 13.0.4
15:39:34,344 INFO  [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool -- 96) RESTEASY002225: Deploying jakarta.ws.rs.core.Application: class br.com.powerdba.r2.JakartaRestConfiguration$Proxy$_$$_WeldClientProxy
15:39:34,373 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 96) WFLYUT0021: Registered web context: '/r2' for server 'default-server'
15:39:34,416 INFO  [org.jboss.as.server] (ServerService Thread Pool -- 45) WFLYSRV0010: Deployed "r2-1.0.0.war" (runtime-name : "r2-1.0.0.war")
15:39:34,457 INFO  [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0212: Resuming server
15:39:34,461 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
15:39:34,461 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990
15:39:34,464 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 31.0.1.Final (WildFly Core 23.0.3.Final) started in 7537ms - Started 463 of 683 services (322 services are lazy, passive or on-demand) - Server configuration file in use: standalone.xml
15:39:35,498 INFO  [stdout] (default task-1) [INFO ] 2024-04-18 15:39:35.497 [default task-1] ValidateLoginFilter - uri = /r2/ 
15:39:35,500 INFO  [stdout] (default task-1) [WARN ] 2024-04-18 15:39:35.500 [default task-1] ValidateLoginFilter - Page needs authenticated users and user is not logged in. Calling Login page. 
15:39:35,506 INFO  [stdout] (default task-1) [INFO ] 2024-04-18 15:39:35.506 [default task-1] ValidateLoginFilter - uri = /r2/login.xhtml 
15:39:35,506 INFO  [stdout] (default task-1) [INFO ] 2024-04-18 15:39:35.506 [default task-1] ValidateLoginFilter - Calling doFilter for login page 
15:39:35,753 INFO  [stdout] (default task-1) [INFO ] 2024-04-18 15:39:35.753 [default task-1] LoginBean - ---/nLoginBean/n---

我的应用程序登录自定义文件

[INFO ] 2024-04-18 15:39:35.497 [default task-1] ValidateLoginFilter - uri = /r2/ 
[WARN ] 2024-04-18 15:39:35.500 [default task-1] ValidateLoginFilter - Page needs authenticated users and user is not logged in. Calling Login page. 
[INFO ] 2024-04-18 15:39:35.506 [default task-1] ValidateLoginFilter - uri = /r2/login.xhtml 
[INFO ] 2024-04-18 15:39:35.506 [default task-1] ValidateLoginFilter - Calling doFilter for 
[INFO ] 2024-04-18 15:39:35.753 [default task-1] LoginBean - ---/nLoginBean/n---

java jboss wildfly
1个回答
0
投票
  1. 是否可以将所有 WildFly 应用程序服务器日志重定向到我的应用程序 Log4j2 配置的日志,绕过或忽略默认的 WildFly 日志管理器?是否可以通过 Java 代码或额外的 XML/属性文件实现?

不可以,您不能将日志消息从服务器重定向到您自己的日志记录配置中。来自部署外部模块的日志消息将始终使用日志记录子系统中定义的日志记录配置。

  1. 如果上述 1 不可行,我如何使用默认的 WildFly 应用服务器日志?我尝试使用 java.util.logging 类,但它们不会在控制台中或独立日志文件中写入任何内容。

您可以继续在应用程序内使用 log4j-api 作为记录器。您只需从部署中删除该库并删除 log4j-core 库。然后,您可以配置日志记录子系统或在 您的部署中使用 logging-profile 或日志记录配置 (logging.properties)。

  1. 为了保持理智:使用 WildFly 时记录应用程序消息的最佳实践是什么?

这确实取决于。实际上你可以使用任何日志门面; log4j-api (log4j2)、slf4j、jboss-logging、commons-logging 或 JUL。从应用程序的角度来看,您应该做的就是记录消息。配置将在容器中进行。

对于“内部”日志消息,例如

[stdout]
你看到了。 WildFly 将
System.out
System.err
包装在 JUL 记录器中。这是为了解决您可能无法访问控制台的情况,但您不想错过使用
System.out
而不是真正的记录器的随机库中的一些日志。您看到这些的原因是您在部署中的日志记录配置中定义了
ConsoleAppender

您还可以继续在部署中使用 log4j-core 和您自己的日志记录配置。您唯一无法获得的是来自服务器模块的日志记录。在大多数情况下,这并不是什么大问题,但我可以看到哪里需要来自 Hibernate 的日志。请参阅文档了解详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.