Spring boot 和 JBoss 8 Wildfly 日志配置应用

Posted

技术标签:

【中文标题】Spring boot 和 JBoss 8 Wildfly 日志配置应用【英文标题】:Spring boot and JBoss 8 Wildfly log configuration application 【发布时间】:2015-01-25 00:32:53 【问题描述】:

我有一个准备成为 WAR 的 Spring Boot 应用程序。它可以在 Tomcat 8(嵌入式或独立)以及 JBoss 8 Wildfly 上毫无问题地部署。 但是在 Tomcat 上,我们已经在 J​​Boos 上配置了工作 logback 配置,但它不再工作了。我尝试了几种不同的建议解决方案:https://***.com/a/21887529/3997870https://***.com/a/23080264/3997870 我发现最好的方法是添加到我的项目 WEB-INF/jboss-deployment-structure.xml

<jboss-deployment-structure>
 <deployment>
  <!-- exclude-subsystem prevents a subsystems deployment unit processors running on a deployment -->
  <!-- which gives basically the same effect as removing the subsystem, but it only affects single deployment -->
  <exclude-subsystems>
   <subsystem name="logging" />
  </exclude-subsystems>
 </deployment>
</jboss-deployment-structure>

但它仍然不能完全解决问题。在日志中,我有两次相同的行(不是因为 logback 配置,因为在 Tomcat 上工作正常),并且在第一条记录中打印了关于时间、级别、线程的双重信息。

[2014-11-26 15:28:42,605] [INFO ] [MSC service thread 1-3        ] [stdout] [NONE      ] [2014-11-26 15:28:42.605  INFO 8228 --- [vice thread 1-3] o.s.boot.SpringApplication               : Starting application on LCJLT306 with PID 8228 (started by Piotr.Konczak in D:\servers\wildfly-8.2.0.Final\bin)
]
[2014-11-26 15:28:42,605] [INFO ] [MSC service thread 1-3        ] [o.s.boot.SpringApplication] [NONE      ] [Starting application on LCJLT306 with PID 8228 (started by Piotr.Konczak in D:\servers\wildfly-8.2.0.Final\bin)]

正如您在上面的示例中看到的那样,第一条记录以某种方式包含额外的时间戳、级别和线程(我猜是 Wildfly 在某些重定向期间添加的),而第二行是正确且预期的。

我的 logback 配置有 2 个部分 - 第一个内部应用程序和第二个外部应用程序,以便在环境中重新配置。 类路径内部:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <include file="/opt/appName/config/appNameLogConfig.xml" />
</configuration>

在应用程序之外(包括一个):

<?xml version="1.0" encoding="UTF-8"?>
<included>

    <property name="DESTINATION_FOLDER" value="/opt/appName/logs" />
    <property name="FILE_NAME" value="AppName" />

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>$DESTINATION_FOLDER/$FILE_NAME.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--daily rollover-->
            <fileNamePattern>$DESTINATION_FOLDER/$FILE_NAME.%dyyyy-MM-dd.log</fileNamePattern>
        </rollingPolicy>

        <encoder>
            <pattern>%-5level %date %-30thread %-30logger30 [%-10mdcrequestId:-NONE] %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="org.springframework" level="INFO"/>
    <logger name="org.hibernate" level="INFO"/>
    <logger name="com.wordnik" level="INFO"/>
    <logger name="com.mangofactory" level="INFO"/>
    <logger name="com.company.appName" level="INFO"/>

    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</included>

有人看到可能的原因或配置错误吗?

【问题讨论】:

你使用的是什么日志外观? 我对 Spring Boot 一无所知。它是启动 WildFly 还是将其部署到 WildFly? 我在 WildFly 容器上部署应用程序。 示例日志是从 server.log 输出的吗?它看起来不像默认格式,并且更符合您的 logback 配置中的格式。 不,它不是来自 server.log。我不喜欢完全禁用 JBoss 的日志记录,所以我在 WAR 中使用 jboss-deployment-structure.xml 禁用了日志记录系统。然后我的 logback 配置工作并将日志放入指定的文件中,但如上所述使用双行。 【参考方案1】:

我知道这有点晚了,但是如果你们中的一些人遇到这个问题,另一种选择是:不要禁用整个日志记录子系统,而只是排除 JBoss/Wildfly 提供的 slf4j 库,以使用spring-boot 使用的一个。

<jboss-deployment-structure>
  <deployment>
    <exclusions>
      <module name='org.slf4j'/>
      <module name='org.slf4j.impl'/>
    </exclusions>
  </deployment>
</jboss-deployment-structure>

希望能帮助别人。

【讨论】:

这行得通。对于其他所有人,您需要在WEB-INF\jboss-deployment-structure.xml 文件中添加答案,如果它不存在,只需创建一个新的。【参考方案2】:

我正在使用我自己的日志记录配置 log4j2 xml 而不是 spring 的日志记录,并且在 Wildfly 上遇到了同样的问题。我评论了整个子系统以覆盖它。

【讨论】:

以上是关于Spring boot 和 JBoss 8 Wildfly 日志配置应用的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Jboss-eap-6.4 中部署 Spring Boot 应用程序

jboss spring boot

resin发布spring-boot项目报错“java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger”

Spring Boot + Spring Data 多租户

带有 Keycloak 的 Angular 和 Spring Boot REST API 的 CORS 问题

带有 Keycloak 的 Angular 和 Spring Boot REST API 的 CORS 问题