Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging Logback JsonLayout在同一行打印所有日志_Logging_Spring Boot_Logback - Fatal编程技术网

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

Logging Logback JsonLayout在同一行打印所有日志,logging,spring-boot,logback,Logging,Spring Boot,Logback,我使用带Spring Boot的JsonLayout以JSON格式记录消息。我只希望将日志消息记录到控制台,而不是日志文件 我注意到JSON日志连续记录在同一行上。在生产中,这是可以的,因为我们将把日志发送到日志聚合器。但这就有点难以分析当地的发展 日志 {"timestamp":"2016-11-13 23:06:17.727","level":"INFO","thread":"qtp745835029-19","logger":"com.test.controller.TestControl

我使用带Spring Boot的JsonLayout以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"}
下面是logback配置
logbackspring.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>

假的
yyyy-MM-dd''HH:MM:ss.SSS
我是否在配置中遗漏了一些内容,因此它们被记录在控制台上的不同行上


感谢您在这方面的帮助。

编辑:尝试将预打印更改为true->
true

您在
consoleAppender中写入日志两次

   <logger name="jsonLogger" additivity="false" level="DEBUG">
        <appender-ref ref="consoleAppender"/>
    </logger>
    <root level="INFO">
        <appender-ref ref="consoleAppender"/>
    </root>

改为

<logger name="jsonLogger" additivity="false" level="DEBUG"/>
<root level="INFO">
    <appender-ref ref="consoleAppender"/>
</root>

我切换到使用没有问题的JSONLayout。

您需要为
ch.qos.logback.contrib.json.classic.JSONLayout
设置
appendLineSeparator
选项为
true
。例如:

<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>

yyyy-MM-dd''HH:MM:ss.SSS
真的

使用如下方式将Spring Boot应用程序(或JSON日志文件)的输出传输到:

java -jar target/myapp.jar | jq -R 'fromjson?'
这将在应用程序输出之后提供漂亮、颜色突出、打印精美的json。应用程序输出的任何非JSON的内容都将被忽略(例如:Spring引导横幅)

您可以使用jq中的过滤器仅显示信息级别的消息输出:

java -jar target/myapp.jar | jq -c -R 'fromjson? | select(.level="INFO") | {message}'
或者,您可以使用过滤器删除不希望看到的关键点:

java -jar target/myapp.jar | jq -c -R 'fromjson? | del(.timestamp,.thread)'

将prettyPrint设置为true是一种解决方案。但也有一些情况下,我们需要单行日志,比如用于注册云观察等服务。 在布局中添加以下内容

<appendLineSeparator>true</appendLineSeparator>
true

感谢萨加尔的回复。但是删除appender并不能解决日志打印在同一行上的问题。请尝试将prettyPrint更改为true->trueReference文档:,可能您需要在logback中的JSONLayout类中添加complete=“true”。您提供了指向Log4J文档的链接,但问题是关于logback,不是Log4J。这里有一个很好的方法来为Spring Boot设置logstash logback编码器: