Log4j2在标准输出之间打印了新行

3
为什么log4j在标准输出appender中打印一个新的换行符?
我的log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config">
    <Appenders>
        <File name="FILE" fileName="<<FILEPATH>>\logfile.log"
            append="true">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} | %-5p | %l - %m%n" />
        </File>
        <File name="UIFILE" fileName="<<FILEPATH>>\uilogfile.log"
            append="true">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} | %m%n" />
        </File>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout>
                <pattern>[%-5p] %C{2} - %m%n</pattern>
            </PatternLayout>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="org.apache.log4j.xml" level="INFO"/>
        <Logger name="com.foo" level="DEBUG" />
        <Logger name="com.foo.services.web.controllers.FOOLoggingController"
            level="INFO">
            <AppenderRef ref="UIFILE" />
        </Logger>
        <Root>
            <AppenderRef ref="STDOUT" />
            <AppenderRef ref="FILE" />
        </Root>
    </Loggers>
</Configuration>

一切都正常,但输出之间会出现新行,不知道为什么!

enter image description here

我尝试了一些方法,比如从模式布局中删除%n,但这样做后,日志本身就停止了输出。文件输出很好,它不会在中间打印新行。有人遇到过类似的问题吗?


我有同样的问题。你解决了吗? - jlanza
嗨@jlanza,问题仍然存在。到目前为止我还没有得到任何解决方案。 - 3AK
不可能 :( 我不知道为什么会发生这种情况。实际上应该有更多的人面临同样的问题。 - jlanza
@jlanza - 是的,你说得对。但由于它不会引起严重问题,我相信人们可能不会太在意 :) - 3AK
2个回答

2

我通过将控制台模式字符串中的%n替换为\n来解决这个问题。因此,控制台附加程序将如下所示:

<Console name="STDOUT" target="SYSTEM_OUT">
   <PatternLayout pattern ="[%-5p] %C{2} - %m \n" />
</Console>

1

使用 \n 进行替换并不是一个好的解决方案。 你应该确保是否有另一个日志框架将你的日志包装到标准输出中。 这种情况发生在应用服务器中,部署的应用程序使用日志框架将格式化的消息发送到标准输出,而服务器使用自己的活动日志框架将消息包装成自己的格式,然后再发送到标准输出。 这会导致双重格式化和双重换行符。检查你的运行时环境,看看是否有一个活动的记录器包装了你的消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接