gpt4 book ai didi

spring-boot - 如何将自定义字段添加到日志logback-logstash

转载 作者:行者123 更新时间:2023-12-04 02:35:42 33 4
gpt4 key购买 nike

我的Spring Boot日志当前如下所示。

{"@timestamp":"2018-08-07T14:49:21.244+01:00","@version":"1","message":"Starting Application on ipkiss bla bla)","logger_name":"logger name....","thread_name":"main","level":"INFO","level_value":20000}

使用如下的logback-spring.xml设置
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="com.ipkiss.correlate.logback.CorrelationPatternLayoutEncoder">
<pattern>%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} id = %id %m%n%wEx</pattern>
</encoder>
</appender>

和我的LayoutEncoder类看起来像这样
public class CorrelationPatternLayoutEncoder extends PatternLayoutEncoder {
public CorrelationPatternLayoutEncoder() {

}

@Override
public void start() {
PatternLayout patternLayout = new PatternLayout();
patternLayout.getDefaultConverterMap().put("id", CorrelationConverter.class.getName());
patternLayout.setContext(context);
patternLayout.setPattern(getPattern());
patternLayout.setOutputPatternAsHeader(outputPatternAsHeader);
patternLayout.start();
this.layout = patternLayout;
this.started = true;
}

}

我想要达到的目的是将id添加到日志中,我无法使logstach附加我的id,我尝试了根据文档的“自定义”字段,但无法使其正常工作,
有什么想法可以实现这一目标吗?

这就是我要结束的
{"id":"3a7ccd34-d66a-4fcc-a12e-763a395a496c","@timestamp":"2018-08-07T14:49:21.244+01:00","@version":"1","message":"Starting Application on ipkiss bla bla)","logger_name":"logger name....","thread_name":"main","level":"INFO","level_value":20000}

或ID附加在日志末尾。

最佳答案

logstash-encoder github page

By default, each entry in the Mapped Diagnostic Context (MDC) (org.slf4j.MDC) will appear as a field in the LoggingEvent.



简而言之,如果您将ID条目添加到MDC中,它将自动包含在所有日志中。

要将您的ID添加到MDC,请执行以下操作:
MDC.put("id", uuid);

由于MDC是线程局部变量,因此您必须在请求使用完毕后清除它
MDC.remove("id")

在Web应用程序中,添加和清除MDC中的值通常是在servlet过滤器中完成的。
public class IdFilter implements Filter{
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
MDC.put("id", UUID.randomUUID().toString());
try {
filterChain.doFilter(servletRequest, servletResponse);
} finally {
MDC.remove("id");
}
}
}

关于spring-boot - 如何将自定义字段添加到日志logback-logstash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51729062/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com