0

我正在开发 JBoss EAP 7。我使用自己的 log4j2 而不是 Jboss 日志记录。所以我将它们排除在 Jboss-deployment-structure.xml 文件中。

<deployment>
    <exclude-subsystems>
            <subsystem name="logging" />
        </exclude-subsystems>
     <!--
      Prevent that the server add automatically dependencies -->
      <!-- Exclude all logging dependencies so we can use log4j2 -->
      <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>

在我的 log4j2.xml 文件中,我提到了模式布局,如下所示。

<Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="%p|%d|%c|%m|%n" />
        </Console>

但是,当我最初启动应用程序时,会加载一个类,其中的日志可以正确打印,如下所示。

DEBUG|2017-08-08 13:20:26,993|Default.com.test.StartClass|deleting directory: C:\eclipse\workspace\WEB-INF\templates

但后来当 Jboss 服务器开始加载其子系统时,它正在添加标准输出并在我的实际模式前面添加一些其他内容。

13:39:06,997 INFO  [stdout] (ServerService Thread Pool -- 87) INFO|2017-08-08 13:39:06,997|Default.com.test.AppXmlUnmarshaller|Unmarshalling took 342 milliseconds.

我不明白为什么在排除子系统后它也采用了这种模式布局。请帮助我如何解决这个问题。

提前致谢。

4

1 回答 1

0

JBoss EAP 将两者都包装stdoutstderr记录器中。我假设您正在使用ConsoleAppender将写入stdout. 如果您想避免使用标准模式前缀,则需要创建一个单独的前缀console-handler并为其分配一个仅打印消息的模式。然后创建一个stdout记录器并将新的记录器分配console-handler给它use-parent-handlersset to false。应该执行以下 CLI 命令之类的操作。

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

如果您排除不需要这些依赖项排除的日志记录子系统,也只是一个仅供参考。日志子系统是将这些依赖项添加到您的部署中。

于 2017-08-08T20:53:58.810 回答