我正在研究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服务器开始加载其子系统时,它正在添加stdout并在我的实际模式前面添加一些其他东西。
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.
我不排除为什么在排除子系统之后也采用了这种模式布局。 请帮我解决这个问题。
提前致谢。
答案 0 :(得分:0)
JBoss EAP将stdout
和stderr
包装在记录器中。我假设您使用的ConsoleAppender
会写入stdout
。如果要避免使用标准模式前缀,则需要创建单独的console-handler
并为其指定仅打印消息的模式。然后创建一个stdout
记录器,并将新console-handler
分配给use-parent-handlers
,false
设置为/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)
。类似下面的CLI命令应该这样做。
php
如果您排除日志记录子系统,那么您也不需要这些依赖项排除项。日志记录子系统将这些依赖项添加到您的部署中。