0

我使用spring boot,我想在logback的自定义过滤器中获取application.properties属性。我知道如何正常进入,但这对我来说完全不同。

我的 application.properties,

sample.name="firstName"

和 logback-spring.xml 包含,

<configuration>

    <property resource="application.properties" />

    <springProperty scope="context" name="firstName" source="sample.name"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>${logging.console.level:-ERROR}</level>
        </filter>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="com.xxx.xxx.logback.LogbackJsonEventLayout"/>
        </encoder>
        <filter class="com.xx.xx.logging.CriticalAlertLoggerFilter"/>

    </appender>

    <root level="error">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

创建客户过滤器,

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;

@Component
public class CriticalAlertLoggerFilter extends Filter<ILoggingEvent> {

  public static final String ALERT_CRITICAL_STATUS = "CRITICAL";

  @Value("${firstName}")  // This is not working using @Value and not sure how to get it.
  private String name;

  @Override
  public FilterReply decide(ILoggingEvent event) {
    if (event.getLevel().isGreaterOrEqual(Level.ERROR)) {
      MDC.put("sp-eventSourceUUID",name);

    return FilterReply.ACCEPT;
  }
}

我想知道如何在我的客户过滤器中获取 sample.name 的属性值。

4

1 回答 1

1

过滤器不应包含 Spring 注释。为属性创建一个 setter 方法并通过如下方式name设置其值:logback-spring.xml

<filter class="com.mycompany.logback.filter.CriticalAlertLoggerFilter">
    <name>${firstName}</name>
</filter>

就像ThresholdFilter在您的示例中一样(它有一个setLevel()方法)。

于 2020-03-27T15:19:32.380 回答