我试图限制日志消息的大小,我成功地做到了这一点与错误追溯(使用ShortenedThrowableConverter
),但我没有设法找到一个解决方案,以消息本身。
我知道一种方法是使用<pattern/>
,但由于我自己实现了编码器。
我尝试使用布局,但遇到了以下错误:
no applicable action for [layout], current ElementPath is [[configuration][appender][encoder][layout]]
下面是我的一些代码:
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="console-json" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="com.test.log.logback.JsonEncoder">
<throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
<maxLength>20</maxLength>
</throwableConverter>
</encoder>
</appender>
<root level="info">
<appender-ref ref="console-json" />
</root>
<shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
</configuration>
编码器:
package com.test.log.logback;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import net.logstash.logback.stacktrace.ShortenedThrowableConverter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class JsonEncoder extends net.logstash.logback.encoder.LogstashEncoder {
private String customFields;
ShortenedThrowableConverter converter = new ShortenedThrowableConverter();
public JsonEncoder() {
converter.setMaxLength(10);
setThrowableConverter(converter);
setFieldNames(new FieldNames());
setTimeZone("UTC");
setFindAndRegisterJacksonModules(false);
}
}
2条答案
按热度按时间u0njafvf1#
要在使用
net.logstash.logback.encoder.LogstashEncoder
时限制JSON输出中的message
字段,您需要:1.禁用默认
message
字段输出1.使用模式提供程序添加自定义
message
字段例如:
或者作为自定义编码器:
或者,您可以使用
net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder
(它是LogstashEncoder
的超类),并完全按照您喜欢的方式使用JSON提供程序构建JSON事件。例如:
或者作为自定义编码器:
7fyelxc52#
我的版本: