Logback JsonLayout在同一行上打印所有日志

Ano*_*oop 12 logging logback spring-boot

我正在使用JsonLayout和Spring Boot来记录JSON格式的消息.我只希望将日志消息记录到控制台而不是日志文件.

我注意到JSON日志在同一行上连续记录.在生产时,这将是正常的,因为我们将日志发送到日志聚合器.但是,对于本地发展来说,这有点难以分析.

日志

{"timestamp":"2016-11-13 23:06:17.727","level":"INFO","thread":"qtp745835029-19","logger":"com.test.controller.TestController","message":"Info log:: printme 1","context":"default"}{"timestamp":"2016-11-13 23:06:17.727","level":"DEBUG","thread":"qtp745835029-19","logger":"com.test.controller.TestController","message":"Debug log:: printme","context":"default"}{"timestamp":"2016-11-13 23:06:17.727","level":"WARN","thread":"qtp745835029-19","logger":"com.test.controller.TestController","message":"Warn log:: printme","context":"default"}{"timestamp":"2016-11-13 23:06:17.727","level":"ERROR","thread":"qtp745835029-19","logger":"com.test.controller.TestController","message":"Error log:: printme","context":"default"}
Run Code Online (Sandbox Code Playgroud)

下面是logback配置
logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
            <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
                <prettyPrint>false</prettyPrint>
            </jsonFormatter>
            <timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
        </layout>
    </appender>
    <logger name="jsonLogger" additivity="false" level="DEBUG">
        <appender-ref ref="consoleAppender"/>
    </logger>
    <root level="INFO">
        <appender-ref ref="consoleAppender"/>
    </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我错过了配置中的某些内容,以便它们在控制台上的不同行上登录.

感谢您的帮助.

mvm*_*vmn 21

您需要将appendLineSeparator选项设置为truefor ch.qos.logback.contrib.json.classic.JsonLayout.这样的例子:

<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
        <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter" />
        <timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
        <appendLineSeparator>true</appendLineSeparator>
    </layout>
</appender>

<root level="debug">
    <appender-ref ref="STDOUT" />
</root>
Run Code Online (Sandbox Code Playgroud)

  • 这就是答案!印刷不漂亮。您仍然可以使用漂亮的打印,但它不会解决问题,因为在每条消息的末尾写入`} {`而没有appendSeparator = true。 (2认同)

小智 7

将 PrettyPrint 设置为 true 是一种解决方案。但在某些情况下,我们需要单行日志,例如发送到云观看等服务。在布局中添加以下内容

<appendLineSeparator>true</appendLineSeparator>
Run Code Online (Sandbox Code Playgroud)


Sag*_*gar -3

编辑:尝试将 PrettyPrint 更改为 true -><prettyPrint>true</prettyPrint>

您在中写入日志两次consoleAppender

   <logger name="jsonLogger" additivity="false" level="DEBUG">
        <appender-ref ref="consoleAppender"/>
    </logger>
    <root level="INFO">
        <appender-ref ref="consoleAppender"/>
    </root>
Run Code Online (Sandbox Code Playgroud)

改成

<logger name="jsonLogger" additivity="false" level="DEBUG"/>
<root level="INFO">
    <appender-ref ref="consoleAppender"/>
</root>
Run Code Online (Sandbox Code Playgroud)