当前位置: 首页 > 知识库问答 >
问题:

Spring执行器/健康记录器设置为关闭,但仍在记录

轩辕鸿
2023-03-14

我想在application.properties文件中将 /health执行器endpoint的记录器设置为OFF。应用程序在Spring Boot 1.5上。 /health将是我们F5的新监控url。我不想淹没日志。我有这个。

    logging.level.org.springframework.web=DEBUG

    org.springframework.boot.actuate.health.Logger=OFF
    logging.level.org.springframework.boot.actuate.health=OFF

我仍然在控制台和日志文件中记录调试日志。唯一有效的方法是将第一个设置为INFO或更高。但是,这是不可取的。所以,现在我得到了这个

2020-05-06 17:14:01.545 DEBUG 58588 --- [nio-9095-exec-5] o.s.web.servlet.DispatcherServlet        : DispatcherServlet with name 'dispatcherServlet' processing GET request for [/health]
2020-05-06 17:14:01.552 DEBUG 58588 --- [nio-9095-exec-5] o.s.web.servlet.DispatcherServlet        : Last-Modified value for [/health] is: -1
2020-05-06 17:14:01.848 DEBUG 58588 --- [nio-9095-exec-5] m.m.a.RequestResponseBodyMethodProcessor : Written [UP {}] as "application/vnd.spring-boot.actuator.v1+json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@144409aa]
2020-05-06 17:14:01.849 DEBUG 58588 --- [nio-9095-exec-5] o.s.web.servlet.DispatcherServlet        : Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
2020-05-06 17:14:01.849 DEBUG 58588 --- [nio-9095-exec-5] o.s.web.servlet.DispatcherServlet        : Successfully completed request

我需要设置不同的记录器属性吗?对于不同的类/包?

共有1个答案

韩禄
2023-03-14

我使用logback,因此为此添加了日志过滤器。您需要更改正则表达式以匹配您自己的日志记录格式。

package eu.stackoverflow.logging;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Pattern;

public class IgnoringHealthAndPrometheusLoggingFilter extends Filter<ILoggingEvent> {

    private static final Pattern HEALTH_OR_PROMETHEUS =
        Pattern.compile("GET \"/(health|prometheus)\", parameters=\\{}");
    private static final Pattern COMPLETED =
        Pattern.compile("Completed 200 OK");

    private Set<String> activeThreads = new HashSet<>();

    @Override
    public FilterReply decide(ILoggingEvent loggingEvent) {
        if (isHealthOrPrometheus(loggingEvent.getMessage())) {
            activeThreads.add(loggingEvent.getThreadName());
            return FilterReply.DENY;
        } else if (isCompleted200Ok(loggingEvent.getMessage()) && activeThreads.remove(loggingEvent.getThreadName())) {
            return FilterReply.DENY;
        } else {
            return FilterReply.ACCEPT;
        }
    }

    private boolean isHealthOrPrometheus(String message) {
        return HEALTH_OR_PROMETHEUS.matcher(message).matches();
    }

    private boolean isCompleted200Ok(String message) {
        return COMPLETED.matcher(message).matches();
    }
}
    <appender class="ch.qos.logback.core.ConsoleAppender" name="CONSOLE">
        <filter class="eu.stackoverflow.logging.IgnoringHealthAndPrometheusLoggingFilter" />
    </appender>

有关logback过滤器的更多信息:https://logback.qos.ch/manual/filters.html

 类似资料:
  • 我将Spring Boot执行器API用于我的项目,该项目有一个健康检查endpoint,并通过以下方式启用它: 实现这一点的正确途径是什么?

  • 我调整了我的Spring启动执行器活动/准备日志在application.properties文件 但是它在KuberNate环境中记录健康检查日志... 有没有办法关掉健康检查日志... 感谢你的回应...

  • 对于我一直在开发的一个微服务,我创建了一个自定义健康检查类,扩展了AbstractHealthIndicator,并能够在中获得输出 但当我向领事注册服务时,健康检查状态为失败。 尝试将执行器url配置为领事健康检查为spring。云领事发现健康检查url=http://localhost:8080/actuator/health。但它仍然失败,出现错误http://localhost:8566/

  • 因此,我将Spring引导执行器添加到我的应用程序中,并在应用程序中指定。属性管理。endpoint。健康隐藏物生存时间=120秒,以缓存健康检查结果。因此,当我调用执行器/健康时,结果被缓存,效果很好。 当我调用执行器/健康/就绪或自定义创建的组时,问题开始出现。该请求结果不会被缓存。我查阅了Spring文档,只找到了主要健康终点的信息,没有找到特定人群的信息。 所以我的问题是:我错过了什么吗?

  • {“Status”:“Down”} 我需要做什么才能显示自定义健康状况指示器?