我正在编写一个SpringBoot3应用程序,它也需要在日志(log)文件中报告指标.

我通过以下方式注册了一个io.micrometer.core.instrument.logging.LoggingMeterRegistry实例:

@Bean
LoggingMeterRegistry loggingMeterRegistry() {
    return new LoggingMeterRegistry();
}

它的工作方式与预期一致,但是:

  1. 我不知道如何通过application.yaml文件提供配置设置(如step).
  2. 我不知道如何注册类com.codahale.metrics.MetricFilter的自定义实例来过滤输出.

谁能告诉我如何实现这些目标?

提前谢谢你了!

Edit:我的问题似乎接近How to configure LoggingMeterRegistry step duration in Spring Boot 2.x?.

推荐答案

这是我对第一个问题"I don't know how to provide configuration settings (like the step) by the application.yaml file"的非常干净的解决办法(在对LoggingMeterRegistry进行了大量调试后发现的).

Configuration class

@Bean
LoggingMeterRegistry loggingMeterRegistry(Environment environments) {
    LoggingRegistryConfig config =
        key -> {
            String property = null;

            switch (key) {
                case "logging.enabled":
                    property = "management.metrics.export.logging.enabled";
                    break;

                case "logging.step":
                    property = "management.metrics.export.logging.step";
                    break;

            }

            return
                  (null != property)
                ? environments.getProperty(property)
                : null;
        };

    return new LoggingMeterRegistry(config, Clock.SYSTEM);
}

application.yaml

management:
  metrics:
    export:
      logging:
        step: 10s

现在,我要为第二个问题找到解决方案……

Java相关问答推荐

将@ManyToOne JPA Composite Key用作Id保存实体添加额外参数

Android视图覆盖不阻止点击它后面的控件

gitlab ci不会运行我的脚本,因为它需要数据库连接'

JPackaged应用程序启动MSI调试,然后启动System. exit()

最小拓Flutter 排序的时间复杂度是多少?

S的字符串表示是双重精确的吗?

Exe4j创建的应用程序无法再固定在任务栏Windows 11上

我需要生成一个文件来整合每个特性执行的所有JSON结果

如何找到MongoDB文档并进行本地化?

如何正确创建序列图?

Jenv-相同的Java版本,但带有前缀

声明带有泛型的函数以用作查找映射中的值

Lombok@Nonnull是否也对供应商有影响?

在使用具有不同成本的谓词调用allMatch之前对Java流进行排序会带来什么好处吗?

使用for循环时出现堆栈溢出错误,但如果使用if块执行相同的操作,则不会产生错误

在线程Java中调用Interrupt()之后调用Join()

在Java中将.GRF转换为图像文件

AspectJ编织外部依赖代码,重新打包jar并强制依赖用户使用它

由于可为null,无法在kotlin中实现java接口

在输入端没有可行的替代方案'; Select *';