【问题标题】:WIldfly 10 + logbackWIldfly 10 + logback
【发布时间】:2017-07-03 19:01:57
【问题描述】:

我花了几天时间尝试用我的 wildfly 10 项目设置 logback。

我的目标是:

  1. 服务器日志应由 wildfly logger 创建。
  2. 我的 EAR 日志应该由 logback 创建。
  3. Lo​​gback 和 Wildfly 记录器将日志记录到控制台。

我的项目骨架是maven生成的,如下:

  • 项目名称
  • 项目名称-ear
  • 项目名称-ejb
  • 项目名称-父项
  • 项目名称-网络

我尝试将 logback.xml 添加到 web 和 ejb 项目中的资源 - 它不起作用。我是 Wildfly 的新手,不确定我是否做得对。

我尝试根据this page在所有项目的jboss-deployment-structure.xml中添加以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
    <exclusions>
      <module name="org.apache.commons.logging" />
      <module name="org.apache.log4j" />
      <module name="org.jboss.logging" />
      <module name="org.jboss.logging.jul-to-slf4j-stub" />
      <module name="org.jboss.logmanager" />
      <module name="org.jboss.logmanager.log4j" />
      <module name="org.slf4j" />
      <module name="org.slf4j.impl" />
    </exclusions>
  </deployment>
</jboss-deployment-structure>

什么都没有发生。然后我喜欢另一个:

<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>

什么都没有发生。我是不是在这个时候做错了什么?

然后我找到了在this tutorial 中替换 wildfly 记录器的解决方案。

它有效,但有一个巨大的缺点。日志加倍 - 它看起来 logback 和 wildfly 记录器一次记录到控制台。在 logger.properties 中禁用 wildfly 记录器不起作用。

我不知道我花了这么多时间来实现记录器。 Logback + android 是小菜一碟。 我感谢所有关于这个问题的好的建议和经验。

【问题讨论】:

    标签: logging wildfly logback


    【解决方案1】:

    您使用jboss-deployment-structure.xml 所拥有的功能将起作用,但由于您使用的是EAR,您需要对每个sub-deployment 执行相同的排除。我只排除日志子系统,因为您不需要子系统的任何部分来处理您的部署。

    将 jboss-deployment-structure.xml 添加到您的 EAR 项目中的目录 projectname-ear/src/main/application/META-INF

    另一种选择是将add-logging-api-dependenciesuse-deployment-logging-config 更改为false。使用此选项需要注意的是,它将阻止将日志记录依赖项添加到所有部署中。如果您只有一个部署或所有部署我们 logback 用于日志管理器,那么这将是最简单的选择。

    更新:示例jboss-deployment-structure.xml

    <?xml version="1.0"?>
    <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <deployment>
            <exclude-subsystems>
                <subsystem name="logging" />
            </exclude-subsystems>
        </deployment>
        <sub-deployment name="projectname-web.war">
            <exclude-subsystems>
                <subsystem name="logging" />
            </exclude-subsystems>
        </sub-deployment>
        <sub-deployment name="projectname-ejb.jar">
            <exclude-subsystems>
                <subsystem name="logging" />
            </exclude-subsystems>
        </sub-deployment>
    </jboss-deployment-structure>
    

    要删除重复的日志,请检查 this 帖子。

    【讨论】:

    • 我将 jboss-deployment-structure.xml 添加到目录src/main/resources/META-INF/ 的所有子部署中(EJB、WEB - 其他似乎是自动生成的)。不幸的是,它没有帮助。您的答案的第二部分几乎可以完美运行,但控制台日志仍然存在问题 - 它们被 Wildfly 日志“包装”。我看到@gandalfml 有相同的problem 并没有解决它。
    • 对不起,我应该澄清一下。您需要将排除项添加到 EAR 中的 jboss-deployment-structure.xml。你最终会得到一些
    • 我可以停止在standalone.xml 中关闭wildfly 登录并安居乐业,但我真的很想看看你的第一个建议,所以......我已经阅读了关于子部署和ear 文件的信息.我发现了类似的问题herehere。抱歉我的菜鸟问题,但是如何将 jboss-deployment-structure.xml 添加到我的 EAR 项目中?
    • 我在问题中添加了一个示例。该文件只需要在EAR/META-INF 目录中即可。
    • 不在EAR/META-INF 中,而是在EAR/src/main/application/META-INF 中!!! More。 Wildfly 控制台中的双倍日志怎么样?示例:22:28:31,355 INFO [stdout] (ServerService Thread Pool -- 61) 22:28:31.355 [ServerService Thread Pool -- 61] TRACE c.t.s.a.v1.endpoints.DialogEndpoint - TRACE - 这里我的 logback TRACE 级别日志已被 Wildfly INFO 级别日志包装。
    猜你喜欢
    • 2014-05-29
    • 2016-08-28
    • 2017-04-03
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多