Wildfly8/jBoss 包装 Logback 日志(双前缀)

Pal*_*sen 5 java logback wildfly-8

当使用 Wildfly8 独立 Logback 时,所有日志消息似乎都被 Wildfly 记录器捕获:

21:13:18,808 INFO  [stdout] (default task-4) 21:13:18.806 [default task-4] ERROR some.package.MyClass - Some message
21:13:18,810 INFO  [stdout] (default task-4) 21:13:18.809 [default task-4] WARN  some.package.MyClass - Some message
21:13:18,810 INFO  [stdout] (default task-4) 21:13:18.810 [default task-4] INFO  some.package.MyClass - Some message
21:13:18,810 INFO  [stdout] (default task-4) 21:13:18.810 [default task-4] DEBUG some.package.MyClass - Some message
21:13:18,811 INFO  [stdout] (default task-4) 21:13:18.811 [default task-4] TRACE some.package.MyClass - Some message
Run Code Online (Sandbox Code Playgroud)

我想省略 Wildfly 添加的第一部分,以便消息看起来像这样:

21:13:18.806 [default task-4] ERROR some.package.MyClass - Some message
21:13:18.809 [default task-4] WARN  some.package.MyClass - Some message
21:13:18.810 [default task-4] INFO  some.package.MyClass - Some message
21:13:18.810 [default task-4] DEBUG some.package.MyClass - Some message
21:13:18.811 [default task-4] TRACE some.package.MyClass - Some message
Run Code Online (Sandbox Code Playgroud)

有谁知道如何实现这一目标?

WEB_INF/classes/logback.xml:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <logger name="org.hibernate" level="ERROR" />
    <logger name="org.jboss.logging" level="INFO" />
    <root level="ALL">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

WEB-INF/jboss-deployment-structure.xml:

<?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>
        <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>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)

pom的相关资料:

<packaging>war</packaging>
<!-- JAVA EE -->
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>
<!-- LOGGING -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

小智 2

解决方案之一是在您的 Wildfly / JBoss 配置文件中添加记录器类别stdout和特殊属性handler(例如standalone.xml):

像这样:

<console-handler name="APP_CONSOLE">
    <formatter>
        <pattern-formatter pattern="%s%e%n"/>
    </formatter>
</console-handler>
<logger category="stdout" use-parent-handlers="false">
  <handlers>
    <handler name="APP_CONSOLE"/>
  </handlers>
</logger>
Run Code Online (Sandbox Code Playgroud)

不要忘记use-parent-handlers="false",否则它将从根记录器继承处理程序。