logback 自定义log字段(MDC)推送到logstash(spring boot + logback+ logstash)

直接上代码:

1.创建FIlter,往 MDC 里面追加内容

@WebFilter
@Component
public class LogBackFilter implements Filter {
    

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // LOGSTASH 日志附加信息追加
        addMDC(request,response,chain);
        
    }

    @Override
    public void destroy() {
        
        rmMDC();
    }

    private void addMDC(ServletRequest request, ServletResponse response, FilterChain chain){

        HttpServletRequest httpServletRequest = ((HttpServletRequest) request);

        String uuid = UUID.randomUUID().toString();
        MDC.put(LogConstant.REQUEST_ID, uuid);

        String remoteIp = request.getRemoteAddr();
        MDC.put(LogConstant.REQUEST_RM_IP, remoteIp);

        String remoteHost = request.getRemoteHost();
        MDC.put(LogConstant.REQUEST_RM_HOST, remoteHost);

        String uri =  httpServletRequest.getRequestURI();
        MDC.put(LogConstant.REQUEST_URI, uri);

        AuthUser authUser = UserContext.getCurrentUser();
        if(authUser!=null){
            MDC.put(LogConstant.REQUEST_USER_ID, authUser.getId());
        }
    }

    private void rmMDC(){
        MDC.remove(LogConstant.REQUEST_ID);
        MDC.remove(LogConstant.REQUEST_RM_IP);
        MDC.remove(LogConstant.REQUEST_RM_HOST);
        MDC.remove(LogConstant.REQUEST_URI);
        MDC.remove(LogConstant.REQUEST_USER_ID);
    }
}

2.logback配置:

includeMdcKeyName 标签 追加 mdc中的key

 
    
        
        ${LOGSTASH_SERVER}
        
            
                
                    UTC
                
            
            
            true
            true

            
            X-Request-Id
            X-Request-Uri
            X-Request-UserId
            X-Request-Rm-Ip
            X-Request-Rm-Host

            
            {"appName":"${APP_NAME}"}

        
    

你可能感兴趣的:(logback,spring,boot,java)