log4j2在stdout之间打印新行

时间:2016-01-02 14:17:46

标签: java logging log4j log4j2

为什么log4j在stdout 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,但是当我这样做时,日志本身就会停止。文件输出很好。它不会在两者之间打印新行。有人遇到过类似的问题吗?

2 个答案:

答案 0 :(得分:1)

我通过在控制台的模式字符串中用 public void methodName() { LinearLayout linearLayout = new LinearLayout(MainActivity.this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); linearLayout.setLayoutParams(params); linearLayout.setOrientation(LinearLayout.HORIZONTAL); linearLayout.setBackgroundColor(Color.RED); ConstraintLayout main = (ConstraintLayout) findViewById(R.id.mainLayout); main.addView(linearLayout); } 替换%n来解决了这个问题。所以Console appender看起来像:

\n

答案 1 :(得分:0)

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