【问题标题】:How to disable capture of std-out in JBoss?如何在 JBoss 中禁用标准输出的捕获?
【发布时间】:2016-05-12 14:30:43
【问题描述】:

使用 JBoss EAP 6.4(我猜是 AS 7.x)。

默认情况下,JBoss 的日志服务将所有应用程序输出捕获到 stdout(可能还有 stderr),并将其包装在自己的基于 log4j 的日志中。在本地运行时,我想完全禁用此(烦人的)功能1,但我在 Interwebs 上找到的参考资料要么不起作用,要么适用于旧版本的 JBoss。我尝试在 jboss-deployment-structure 配置中排除所有可能的日志框架,将 -Dorg.jboss.logging.per-deployment=false 作为系统属性传递,但 JBoss 仍然捕获标准输出。

如何在这个版本的 JBoss 中禁用它?


[1] 如果您必须知道原因,那是因为我们通过 logback 进行了详细的日志记录配置,并且当在 IDE 中本地运行时,希望能够在控制台中查看和控制该日志输出,而无需 JBoss 的日志记录服务进入路。

【问题讨论】:

    标签: java logging jboss jboss7.x jboss-eap-6


    【解决方案1】:

    在入口点中硬编码以捕获stdoutstderr。这样做是为了将两个流都写入定义的日志处理程序。因此,没有真正干净的解决方法。但是,有一些方法可以让它至少看起来更好一点。

    您可以创建一个新的console-handler 并定义一个stdout 记录器,以确保只写入简单的消息。

    以下是一些 CLI 命令,用于配置名为 stdout 的记录器以仅打印它接收到的消息。

    /subsystem=logging/pattern-formatter=plain-formatter:add(pattern="%s")
    /subsystem=logging/console-handler=plain-console:add(autoflush=true, target=System.out, named-formatter=plain-formatter)
    /subsystem=logging/logger=stdout:add(use-parent-handlers=false, handlers=[plain-console])
    

    注意:这可能是我的测试 logback.xml 配置,但我必须为 plain-formatter 使用 %s%n 模式。

    我能想到的唯一其他选择是编写自己的 logback ConsoleAppender,它基于 java.io.FileOutputStream.out 而不是使用 System.out 创建输出流。

    【讨论】:

    • 我会用这个来编辑问题,但是......即使让它更漂亮还远远不够。问题是我们的 slf4j 日志调用指定了一个级别(调试、信息、错误等),但 JBoss 日志记录在 INFO 级别包装了所有内容和输出。因此,如果我想将我的根 logback 级别设置为 WARN,例如,我在控制台上看不到应用程序输出。我真的不明白为什么我的 WAR 的 logback.xml 会影响 JBoss 的标准输出过滤,但这就是我观察到的。
    • 顺便问一下,答案中的那个配置去哪里了?
    • 只有在部署中包含 logback 时才会使用 logback.xml。您是要配置自己的日志管理器,还是希望容器负责日志配置?
    • 对此很抱歉。我澄清了答案以表明这些是 CLI 命令。
    • 是的,slf4j 和 logback 都包含在 WAR 中。我想要的只是关闭或绕过 JBoss 拥有的任何日志记录服务。老实说,它妨碍了我,我更喜欢通过 logback 进行应用程序管理的配置。
    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多