Java 使用转义序列打印双引号的logback

Java 使用转义序列打印双引号的logback,java,logback,slf4j,Java,Logback,Slf4j,我使用以下代码来打印输出中应该包含双引号的日志。 使用转义序列打印双引号,但logback会将转义序列与双引号一起打印 代码: private static final Logger logger = LoggerFactory.getLogger(S3FileWriter.class.getName()); logger.error("\"hello\"") 输出 \"hello\" "hello"

我使用以下代码来打印输出中应该包含双引号的日志。 使用转义序列打印双引号,但logback会将转义序列与双引号一起打印

代码:

  private static final Logger logger = LoggerFactory.getLogger(S3FileWriter.class.getName());
  logger.error("\"hello\"")
输出

\"hello\"
"hello"
所需输出

\"hello\"
"hello"
配置

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
    <property name="component" value="${COMPONENT}"/>
    <property name="componentVersion" value="${COMPONENT_VERSION}"/>
    <property name="logLevel" value="${LOG_LEVEL}"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <pattern>
                    <pattern>
                        {
                            "timestamp": "%date{\"yyyy-MM-dd'T'HH:mm:ss,SSSZ\"}",
                            "message": "%message",
                            "component":"${component}",
                            "component_version":"${componentVersion}",
                            "machine":"${HOSTNAME}",
                            "request_id":
                                {
                                    "trace_id":"%X{X-B3-TraceId}",
                                    "span_id":"%X{X-B3-SpanId}",
                                    "parent_span_id":"%X{X-B3-ParentSpanId}"
                                },
                            "data":
                                {
                                    "package":"%logger", "threadId":"%thread"
                                },
                            "exception":"%exception{short}",
                            "stack":"%exception",
                            "level":"%level"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>

    <root level="${logLevel:-INFO}">
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>


{
“时间戳”:“%date{\”yyyy-MM-dd'HH:MM:ss,SSSZ\”,
“消息”:“%message”,
“组件”:“${component}”,
“组件版本”:“${componentVersion}”,
“计算机”:“${HOSTNAME}”,
“请求id”:
{
“跟踪id”:“%X{X-B3-TraceId}”,
“span_id”:“%X{X-B3-SpanId}”,
父项span\u id:“%X{X-B3-ParentSpanId}”
},
“数据”:
{
包“:“%logger”,“threadId”:“%thread”
},
“异常”:“%exception{short}”,
“堆栈”:“%exception”,
“级别”:“%level”
}
自动添加“额外”转义序列,以确保要添加的内容在生成的JSON结构中有效。您已将模式定义为

{
...
“消息”:“%message”
...
}
因此,当您将字符串内容
“hello”
作为七个字符长的字符串(包括引号)时,必须按如下方式添加:

{
...
“消息”:“你好”
...
}
字段
消息
将具有(七个字符长字符串)值
“hello”
。如果添加不带引号的内容,将破坏整个JSON结构:

{
...
消息:“您好”
…^---字符串结束
^---一些无效的JSON令牌
^---字符串开始
^---弦端
}

请将您的问题包括在内,包括logback配置。@Progman添加的配置部分看起来不错。类
LoggingEventCompositeJsonEncoder
正确地编码了json中的字符串。您只需要从
记录器中删除引号。error()