使用Log4J 2进行日志记录时,在Jboss Wildfly日志文件中记录错误

时间:2014-10-11 09:22:46

标签: logging jboss log4j2

我尝试在我的项目中使用Log4J 2.0作为日志框架。

如果我在我的代码中使用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>

提前致谢!

3 个答案:

答案 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中或通过管理控制台全局更改此格式化程序模式,如下所示:

  1. 打开WildFly管理控制台(localhost:9990)
  2. 转到配置 - 核心(在子系统下) - 记录并单击处理程序
  3. 点击详细信息下的编辑以编辑CONSOLE的设置
  4. 这可能是您想要的格式化模式:%s%E%n
  5. 将其粘贴到Formatter的输入框中,然后单击“保存”
  6. 效果立竿见影,无需重启。如果要保留模式,还可以添加新的控制台处理程序。

    关于模式刺痛:

    %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适配器添加到我的类路径中,有关详细信息,请参阅此处:

Log4j to SLF4J Adapter

所以现在我可以从服务器配置管理日志记录。

注1:注意类路径中的 NOT include 也是反向适配器SLF4J桥(log4j-slf4j-impl-2.x.jar)或者你将进入无限循环之间适配器!

注意2:如文档中所述,由于格式转换,适配器可能会导致性能下降。