如何将含DynamicThresholdFilter的Log4j2 XML配置转为Java Properties?
正确的Log4j2 Properties配置(含DynamicThresholdFilter)
原XML配置参考(匹配你的需求场景)
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <DynamicThresholdFilter key="username" defaultThreshold="INFO"> <KeyValuePair key="admin" value="DEBUG"/> <KeyValuePair key="guest" value="WARN"/> </DynamicThresholdFilter> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="DEBUG"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
对应的Java Properties配置
# 全局配置状态 status = WARN # Console Appender 基础配置 appender.console.type = Console appender.console.name = Console appender.console.target = SYSTEM_OUT # DynamicThresholdFilter 配置 # "threshold"是过滤器的唯一标识,可自定义,只要当前Appender下唯一即可 appender.console.filter.threshold.type = DynamicThresholdFilter appender.console.filter.threshold.key = username appender.console.filter.threshold.defaultThreshold = INFO # KeyValuePair 条目,用数字索引区分多个键值对 appender.console.filter.threshold.pairs.0.key = admin appender.console.filter.threshold.pairs.0.value = DEBUG appender.console.filter.threshold.pairs.1.key = guest appender.console.filter.threshold.pairs.1.value = WARN # PatternLayout 配置 appender.console.layout.type = PatternLayout appender.console.layout.pattern = %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n # Root Logger 配置 rootLogger.level = DEBUG rootLogger.appenderRef.console.ref = Console
转换关键注意点(你可能踩坑的地方)
- Log4j2 Properties用点分隔的层级键映射XML的嵌套结构,比如XML中
<Console>下的<DynamicThresholdFilter>对应appender.console.filter.threshold.* - 多个
<KeyValuePair>必须用**数字索引(0、1、2...)**区分,否则配置会被覆盖 - 过滤器需要指定唯一标识(上面的
threshold),Log4j2靠这个标识识别不同的过滤器实例 - 所有配置项的
type必须严格对应XML标签名(比如DynamicThresholdFilter对应type = DynamicThresholdFilter)
内容的提问来源于stack exchange,提问作者HairOfTheDog
相关产品推荐
相关产品推荐

