如果我在我的代码中使用Log4J记录某些内容,我会在Jboss日志文件中看到类似内容:
11:04:07,606 INFO [stdout](默认任务-1)11:04:07.606 [default task-1] ERROR de.housekeepingbook.services.ClientService - 这是一条错误测试消息
但我期待这样的事情:
11:04:07.606 [default task-1] ERROR de.housekeepingbook.services.ClientService - 这是一条错误测试消息
如何删除其他
11:04:07,606 INFO [stdout](默认任务-1)
我的Log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<File name="MyFile" fileName="logs/app.log">
<PatternLayout pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</File>
</appenders>
<loggers>
<root level="debug">
<appender-ref ref="Console" level="debug" />
<appender-ref ref="MyFile" level="debug" />
</root>
<Logger name="org.hibernate.SQL" level="debug"/>
</loggers>
</configuration>
我的standalone.xml(仅限日志记录部分):
<subsystem xmlns="urn:jboss:domain:logging:2.0">
<console-handler name="CONSOLE">
<level name="INFO"/>
<formatter>
<named-formatter name="COLOR-PATTERN"/>
</formatter>
</console-handler>
<size-rotating-file-handler name="FILE" autoflush="true">
<formatter>
<named-formatter name="PATTERN"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="server.log"/>
<rotate-size value="10M"/>
</size-rotating-file-handler>
<logger category="de.housekeepingbook">
<level name="TRACE"/>
</logger>
<root-logger>
<level name="INFO"/>
<handlers>
<handler name="CONSOLE"/>
<handler name="FILE"/>
</handlers>
</root-logger>
<formatter name="PATTERN">
<pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
</formatter>
<formatter name="COLOR-PATTERN">
<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
</formatter>
</subsystem>
提前致谢!
答案 0 :(得分:2)
您的控制台记录器输出通过WildFly中的日志记录模块的控制台处理程序,它将日志记录框架的输出作为您想要消失的部分(时间戳,任务等)的前缀。
我也在努力解决这个问题,我仍然很想知道如何根据部署进行配置。
虽然我在jboss-deployment-structure.xml中排除了WildFly日志系统,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclude-subsystems>
<subsystem name="logging"/>
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
它仍然使用日志记录子系统的控制台处理程序格式化程序模式。为什么?这可能是个错误吗?
您仍然可以在standalone.xml中或通过管理控制台全局更改此格式化程序模式,如下所示:
效果立竿见影,无需重启。如果要保留模式,还可以添加新的控制台处理程序。
%s 是来自您的网络应用程序的实际消息。
“默认模式中的%E 是针对Throwable的。意味着如果正在记录异常,它将打印堆栈跟踪。”(James Perkins,{{ 3}})
%n 会换行。
如果有人知道如何按部署进行操作,请告诉我们。
答案 1 :(得分:1)
如果您选择log4j.xml (log4j2.xml)
而不是使用日志记录子系统配置,则可以在应用程序中添加一些配置。
使用以下内容创建jboss-deployment-structure.xml
,如果要部署EAR,则将其放在META-INF/
目录中;如果是META-INF/
或WEB-INF/
目录,则将其放在<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<!-- Exclusions allow you to prevent the server from automatically adding some dependencies -->
<exclusions>
<module name="org.apache.log4j" />
</exclusions>
</deployment>
</jboss-deployment-structure>
目录中部署WAR。
{{1}}
参考:How do I use log4j.properties or log4j.xml instead of using the logging subsystem configuration?
答案 2 :(得分:0)
我有同样的问题,因为jboss / wildfly没有为log4j2提供日志记录子系统的包装(但是对于log4j1和slf4j)。
所以我的解决方案是将log4j-to-slf4j适配器添加到我的类路径中,有关详细信息,请参阅此处:
所以现在我可以从服务器配置管理日志记录。
注1:注意类路径中的 NOT include 也是反向适配器SLF4J桥(log4j-slf4j-impl-2.x.jar)或者你将进入无限循环之间适配器!
注意2:如文档中所述,由于格式转换,适配器可能会导致性能下降。