logback-spring.xml配置输出日志文件logback %d{HH:mm:ss} [%X{RequestId}] %-5level %logger{50}:%line - %msg%n UTF-8
logback-spring.xml配置输出ESlogback ${LOG_HOME}/%d{yyyy-MM}/%d{yyyy-MM-dd}.log 30 5GB 100MB %d{HH:mm:ss} [%X{RequestId}] %-5level %logger{50}:%line - %msg%n UTF-8
logback-spring.xmllogback http://elasticsearch.y8zh.com/_bulk logback-${SPRING_PROFILES_ACTIVE}-${SPRING_APPLICATION_NAME}-%date{yyyy-MM} app-log es-error-logger 30000 false false false 104857600 3 30000 250 false false 1000 host ${HOSTNAME} false route %X{Route} false method %X{Method} false httpCode %X{HttpCode} false requestId %X{RequestId} false requestIp %X{RequestIp} false severity %level stacktrace %ex logger %logger:%line Content-Type application/json
注意:%X{Route}、%X{Method}、%X{HttpCode}、%X{RequestId}、%X{RequestIp},这些值可以通过下面这种方式得到!
@Component
public class MDCFilter implements Filter {
private static final String REQUEST_ID_HEADER = "RequestId";
private static final String REQUEST_ID = "RequestId";
private static final String ROUTE = "Route";
private static final String METHOD = "Method";
@Value("${spring.application.name}")
private String _applicationName;
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
String requestId = httpRequest.getHeader(REQUEST_ID_HEADER);
if (requestId == null) {
requestId = "111111111111";
}
requestId = "111111111111";
// 还有更加准确的方法
String ip = getRequestSourceIp(httpRequest);
MDC.put(REQUEST_ID, requestId);
MDC.put(ROUTE, "-");
MDC.put(METHOD, httpRequest.getMethod());
MDC.put("RequestIp", ip);
httpResponse.setHeader(REQUEST_ID_HEADER, requestId);
try {
filterChain.doFilter(httpRequest, httpResponse);
} finally {
MDC.clear();
}
}
public static String getRequestSourceIp(HttpServletRequest request) {
String ip = request.getHeader("HTTP_CLIENT_IP");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_FORWARDED");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-FORWARDED-FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
if (ip.equals("0:0:0:0:0:0:0:1")) {
ip = "127.0.0.1";
}
return ip;
}
}
排除日志
logback-spring.xml完整配置logback
logback-spring.xml测试代码日志输出logback %d{HH:mm:ss} [%X{RequestId}] %-5level %logger{50}:%line - %msg%n UTF-8 ${LOG_HOME}/%d{yyyy-MM}/%d{yyyy-MM-dd}.log 30 5GB 100MB %d{HH:mm:ss} [%X{RequestId}] %-5level %logger{50}:%line - %msg%n UTF-8 http://elasticsearch.y8zh.com/_bulk logback-${SPRING_PROFILES_ACTIVE}-${SPRING_APPLICATION_NAME}-%date{yyyy-MM} app-log es-error-logger 30000 false false false 104857600 3 30000 250 false false 1000 host ${HOSTNAME} false route %X{Route} false method %X{Method} false httpCode %X{HttpCode} false requestId %X{RequestId} false requestIp %X{RequestIp} false severity %level stacktrace %ex logger %logger:%line Content-Type application/json
@Slf4j
@RestController
@RequestMapping({"/"})
public class ControllerTest {
@GetMapping("log")
public String log(){
log.info("===>loglogloglog");
return "sss";
}
}



