Logback on Jboss 在记录时重复前缀和新行
Logback on Jboss duplicates prefixes and new lines when logging
我正在处理 java 网络项目。我使用 Wildfly 10。我想将它与 logback 一起使用。我做了一些配置:
pom.xml
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.24</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.1</version>
</dependency>
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender" >
<encoder>
<pattern>[%date] [%thread] [%-5level] [%logger{36}] - %msg%n </pattern>
</encoder>
</appender>
<logger name="com.pr" level="debug" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
jboss-部署-structure.xml
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="logging" />
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
问题是我期待这样的输出:
[2017-02-26 12:32:23,671] [ServerService Thread Pool -- 179] [DEBUG] [o.springframework.jndi.JndiTemplate] - Looking up JNDI
但我得到:
12:32:23,671 INFO [stdout] (ServerService Thread Pool -- 179) [2017-02-26 12:32:23,671] [ServerService Thread Pool -- 179] [DEBUG] [o.springframework.jndi.JndiTemplate] - Looking up JNDI
所以看起来 jboss 在开头添加了一些东西。如何预防?
WildFly 将 System.out
和 System.err
包装在一个记录器中。如果你想使用写入任一流的附加程序或处理程序,你需要使用 java.io.FileDescriptor.out
(或 err
),或者你需要为 stdout
或 [= 创建一个记录器类别17=] 以及分配给记录器的新 console-handler
。
/subsystem=logging/pattern-formatter=stdout:add(pattern="%s%n")
/subsystem=logging/console-handler=stdout:add(autoflush=true, target=System.out, named-formatter=stdout, level=ALL)
/subsystem=logging/logger=stdout:add(use-parent-handlers=false, handlers=[stdout], level=ALL)
上面的 CLI 脚本应该从记录器中删除默认模式 stdout
。
standalone.xml中的对应表示如下:
<console-handler name="stdout" autoflush="true">
<level name="ALL"/>
<formatter>
<pattern-formatter pattern="%s%n"/>
</formatter>
</console-handler>
<logger category="stdout" use-parent-handlers="false">
<level name="ALL"/>
<handlers>
<handler name="stdout"/>
</handlers>
</logger>
我正在处理 java 网络项目。我使用 Wildfly 10。我想将它与 logback 一起使用。我做了一些配置:
pom.xml
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.24</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.1</version>
</dependency>
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender" >
<encoder>
<pattern>[%date] [%thread] [%-5level] [%logger{36}] - %msg%n </pattern>
</encoder>
</appender>
<logger name="com.pr" level="debug" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
jboss-部署-structure.xml
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="logging" />
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
问题是我期待这样的输出:
[2017-02-26 12:32:23,671] [ServerService Thread Pool -- 179] [DEBUG] [o.springframework.jndi.JndiTemplate] - Looking up JNDI
但我得到:
12:32:23,671 INFO [stdout] (ServerService Thread Pool -- 179) [2017-02-26 12:32:23,671] [ServerService Thread Pool -- 179] [DEBUG] [o.springframework.jndi.JndiTemplate] - Looking up JNDI
所以看起来 jboss 在开头添加了一些东西。如何预防?
WildFly 将 System.out
和 System.err
包装在一个记录器中。如果你想使用写入任一流的附加程序或处理程序,你需要使用 java.io.FileDescriptor.out
(或 err
),或者你需要为 stdout
或 [= 创建一个记录器类别17=] 以及分配给记录器的新 console-handler
。
/subsystem=logging/pattern-formatter=stdout:add(pattern="%s%n")
/subsystem=logging/console-handler=stdout:add(autoflush=true, target=System.out, named-formatter=stdout, level=ALL)
/subsystem=logging/logger=stdout:add(use-parent-handlers=false, handlers=[stdout], level=ALL)
上面的 CLI 脚本应该从记录器中删除默认模式 stdout
。
standalone.xml中的对应表示如下:
<console-handler name="stdout" autoflush="true">
<level name="ALL"/>
<formatter>
<pattern-formatter pattern="%s%n"/>
</formatter>
</console-handler>
<logger category="stdout" use-parent-handlers="false">
<level name="ALL"/>
<handlers>
<handler name="stdout"/>
</handlers>
</logger>