【问题标题】:Wrong logging in Jboss Wildfly logfile when logging with Log4J 2使用 Log4J 2 记录时 Jboss Wildfly 日志文件中的错误记录
【发布时间】:2014-10-11 09:22:45
【问题描述】:

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

如果我在代码中使用 Log4J 记录某些内容,我会在 Jboss 日志文件中看到类似的内容:

11:04:07,606 INFO [stdout] (default task-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>

提前致谢!

【问题讨论】:

    标签: logging jboss log4j2


    【解决方案1】:

    您的控制台记录器输出通过 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. 转到Configuration - Core(在子系统下) - Logging 并点击Handler
    3. 点击Details下的Edit来编辑CONSOLE的设置
    4. 这可能是您想要的格式化程序模式:%s%E%n
    5. 粘贴到Formatter的输入框中,点击保存

    效果立竿见影,无需重启。如果您想保留该模式,还可以添加一个新的控制台处理程序。

    关于模式刺:

    %s 是来自您的网络应用程序的实际消息。

    “默认模式中的 %E 用于 Throwable。这意味着如果记录了异常,它将打印堆栈跟踪。”(James Perkins,@987654321 @)

    %n 换行。

    如果有人知道如何在每次部署时执行此操作,请告诉我们。

    【讨论】:

    • @Hillert 有什么消息可以解决这个问题吗?您是否设法同时解决了这个问题?当我在 WildFly 管理控制台中禁用此控制台处理程序时,无论我在部署 log4j2 配置文件中放入什么内容,都不会将任何内容打印到控制台...
    • @Hillert 我也有同样的问题。有消息吗?
    【解决方案2】:

    我遇到了同样的问题,因为 jboss / wildfly 没有提供 log4j2 到日志子系统的包装器(但有 log4j1 和 slf4j)。

    所以我的解决方案是将 log4j-to-slf4j 适配器添加到我的类路径中,请参阅此处了解详细信息:

    Log4j to SLF4J Adapter

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

    注意1:注意NOT include在类路径中还有反向适配器SLF4J桥(log4j-slf4j-impl-2.x.jar),否则你将进入无限循环适配器!

    注意 2:如文档中所述,适配器可能会由于格式转换而导致一些性能损失。

    【讨论】:

    • 谢谢。。添加 SLF4J 解决了所有问题,现在它像以前一样工作了......这应该是公认的答案。
    【解决方案3】:

    如果您选择log4j.xml (log4j2.xml) 而不是使用日志子系统配置,则您需要在应用程序中添加一些配置。

    使用以下内容创建jboss-deployment-structure.xml,如果您正在部署EAR,则将其放在META-INF/ 目录中;如果您正在部署WAR,则将其放在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>
    

    参考号:How do I use log4j.properties or log4j.xml instead of using the logging subsystem configuration?

    【讨论】:

    • 请注意,org.apache.log4j 是用于 log4j-1.2 的包。从 log4j 2 开始,包是 org.apache.logging.log4j。所以上面的建议可能不适用于 log4j 2。也许不同的模块名称会起作用?
    • @RemkoPopma 是的,您可以将 log4j2 作为模块添加,您可以在 developer.jboss.org/thread/239572?start=0&tstart=0 上看到,但答案是停止使用 jboss 的登录服务并使用部署中嵌入的服务跨度>
    • 嗯...您可能想在 JBoss 邮件列表中询问。我对 log4j2 非常熟悉,但我认为我无法为您提供帮助。
    • @RemkoPopma 你是对的,在控制台附加程序中出现了问题
    猜你喜欢
    • 2014-06-19
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2015-04-01
    • 1970-01-01
    • 2020-10-25
    相关资源
    最近更新 更多