我使用spring boot,我想在logback的自定义过滤器中获取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的属性值。
最佳答案
过滤器不应包含 Spring 注释。为 name
属性创建一个 setter 方法,并通过 logback-spring.xml
设置其值,如下所示:
<filter class="com.mycompany.logback.filter.CriticalAlertLoggerFilter">
<name>${firstName}</name>
</filter>
它就像示例中的 ThresholdFilter
(它有一个 setLevel()
方法)。
关于java - 将 application.properties 传递给 Logback 自定义过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60888298/