SpringBoot 心跳日志不记录 access.log

增加Filter

LoggingSkipFilter.java

import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@Component  // 让 Spring 自动扫描并注册
@Order(Ordered.HIGHEST_PRECEDENCE)  // 最高优先级 希望这个判断尽早执行,以免被其他 Filter 影响
public class LoggingSkipFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        if (request instanceof HttpServletRequest) {
            HttpServletRequest httpRequest = (HttpServletRequest) request;
            String uri = httpRequest.getRequestURI();

            // 👇 在这里定义你想排除的 URL(可自行扩展为列表或正则)
            if (uri.equals("/") ||
                    uri.equals("/health") ||
                    uri.startsWith("/actuator/health") ||
                    uri.endsWith(".js") ||
                    uri.endsWith(".css") ||
                    uri.endsWith(".png")) {

                // 设置一个标记属性,属性名与后面 yml 配置的 condition-unless 一致
                request.setAttribute("skipLogging", "true");
            }
        }

        chain.doFilter(request, response);
    }
}

修改配置

application.yml
增加:condition-unless: skipLogging 配置

server:
  port: 50021
  tomcat:
    basedir: ./logs
    background-processor-delay: 30
    redirect-context-root: true
    uri-encoding: UTF-8
    accesslog:
      enabled: true #为true时,上面的日期格式才有意义,否则就是写在一个文件里了
      buffered: true
      condition-unless: skipLogging
      directory: ./logs
      file-date-format: .yyyy-MM-dd
      #pattern: '%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %D ms'
      pattern: '%t %a %m %U %s %b %D ms'
      prefix: access_log
      rename-on-rotate: false
      request-attributes-enabled: false
      rotate: true
      suffix: .log
posted @ 2026-09-08 09:55  VipSoft  阅读(5)  评论(0)    收藏  举报