首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Logback JsonLayout打印同一行上的所有日志

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

Stack Overflow用户
提问于 2016-11-14 01:54:27
回答 6查看 17.5K关注 0票数 30

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

我注意到JSON日志连续记录在同一行上。在生产环境中,这是可以的,因为我们会将日志发送到日志聚合器。但这在当地的发展中变得有点困难。

日志

代码语言:javascript
复制
{"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"}

下面是logback配置

logback-spring.xml

代码语言:javascript
复制
<?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>

我是不是在配置中遗漏了什么,使它们在控制台上单独登录。

谢谢你在这方面的帮助。

EN

回答 6

Stack Overflow用户

发布于 2017-04-26 21:52:42

对于ch.qos.logback.contrib.json.classic.JsonLayout,您需要将appendLineSeparator选项设置为true。示例如下:

代码语言:javascript
复制
<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>

票数 57
EN

Stack Overflow用户

发布于 2020-02-27 19:05:58

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

代码语言:javascript
复制
<appendLineSeparator>true</appendLineSeparator>
票数 4
EN

Stack Overflow用户

发布于 2021-09-29 14:28:11

上面来自@mvnmanswer对我来说工作得很好。以防万一,如果需要漂亮的印刷体和换行符,可以使用以下配置。

代码语言:javascript
复制
<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">
            <prettyPrint>true</prettyPrint>
        </jsonFormatter>
        <timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
        <appendLineSeparator>true</appendLineSeparator>
    </layout>
</appender>

<root level="debug">
    <appender-ref ref="STDOUT" />
</root>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40576959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档