如何让log4j不打印stdout,线程名称

时间:2012-12-09 12:35:10

标签: java logging log4j jboss7.x

为什么log4j打印:

17:58:30,623 INFO  [stdout] (http--127.0.0.1-8080-5)

完整的信息是:

17:58:30,623 INFO  [stdout] (http--127.0.0.1-8080-5) 2012-12-09 17:58:30.623 [INFO] com.edfx.adb.web.controller.AuthController#login - A message

我正在使用JBoss AS7,我将log4j排除在外:

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

我的log4j.properties是:

log4j.rootLogger=INFO, CA

log4j.appender.CA=org.apache.log4j.ConsoleAppender

log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%p] %c#%M - %m%n

我想将消息打印为:

2012-12-09 17:58:30.623 [INFO] com.edfx.adb.web.controller.AuthController#login - A message

我该怎么做?

1 个答案:

答案 0 :(得分:4)

这是因为JBoss STDIO将stdout和stderr以及log4j ConsoleAppender输出包装到stdout。

您可以通过配置日志记录子系统而不是使用log4j.properties文件来完成您尝试执行的操作。使用日志记录子系统也没有理由在jboss-deployment-structure.xml中排除依赖项。

<subsystem xmlns="urn:jboss:domain:logging:1.1">

    <console-handler name="CONSOLE">
        <level name="INFO"/>
        <formatter>
            <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%p] %c#%M - %m%n"/>
        </formatter>
    </console-handler>

    <!-- other handlers and loggers -->

    <root-logger>
        <level name="INFO"/>
        <handlers>
            <handler name="CONSOLE"/>
        </handlers>
    </root-logger>
</subsystem>