【问题标题】:Logback on Jboss duplicates prefixes and new lines when loggingJboss上的Logback在记录时重复前缀和新行
【发布时间】:2017-07-17 00:24:15
【问题描述】:

我正在开发 java web 项目。我使用 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-deployment-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 线程池 -- 179] [DEBUG] [o.springframework.jndi.JndiTemplate] - 查找 JNDI

但我得到了:

12:32:23,671 INFO [stdout] (ServerService 线程池 -- 179) [2017-02-26 12:32:23,671] [ServerService 线程池 -- 179] [DEBUG] [o.springframework.jndi. JndiTemplate] - 查找 JNDI

所以看起来 jboss 在开始时添加了一些东西。如何预防?

【问题讨论】:

  • 如果您只使用ConsoleAppender,您是否有理由宁愿使用 logback 而不是只使用日志子系统?
  • 只是现在..肯定还会有文件附加器...

标签: java logging jboss wildfly logback


【解决方案1】:

WildFly 将 System.outSystem.err 包装在一个记录器中。如果您想使用写入任一流的附加程序或处理程序,您需要使用java.io.FileDescriptor.out(或err),或者您需要为stdoutstderr 创建一个记录器类别以及一个新的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>

【讨论】:

  • 我通过 jboss-cli.sh 连接并运行这些命令...及其工作:) 但是在 netbeans cosnole 中仍然有来自 jboss 服务器的消息...是否可以将这些命令放入配置文件什么的?
  • 我对 Netbeans 插件了解不多,所以我不确定。我假设如果您将路径指向已配置的服务器,它应该可以工作。
  • @JamesR.Perkins 我在 Eclipse 中运行 Wildfly 14 时遇到了同样的问题,我需要在哪里配置 CLI 脚本?
  • 它们需要在您使用的服务器上运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
相关资源
最近更新 更多