Ipk*_*iss 5 spring-boot logstash-logback-encoder
我的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}
Run Code Online (Sandbox Code Playgroud)
使用如下的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>
Run Code Online (Sandbox Code Playgroud)
和我的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;
}
Run Code Online (Sandbox Code Playgroud)
}
我想要达到的目的是将id添加到日志中,我无法使logstach附加我的id,我根据文档尝试了Custom(自定义)字段,但我无法使其正常工作,我有什么想法可以实现?
这就是我要结束的
{"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}
Run Code Online (Sandbox Code Playgroud)
或ID附加在日志末尾。
默认情况下,映射诊断上下文 (MDC) (org.slf4j.MDC) 中的每个条目都将显示为 LoggingEvent 中的一个字段。
简而言之,如果您将 id 条目添加到 MDC,它将自动包含在您的所有日志中。
要将您的 ID 添加到 MDC,请执行以下操作:
MDC.put("id", uuid);
Run Code Online (Sandbox Code Playgroud)
由于 MDC 是一个线程局部变量,您必须在请求完成使用后清除它
MDC.remove("id")
Run Code Online (Sandbox Code Playgroud)
在 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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2028 次 |
| 最近记录: |