Log4j2.yml配置文件多属性变量声明问题求助
Log4j2 YAML 多属性变量正确配置方法
直接给你正确的多属性声明写法,核心是用数组形式定义多个property,严格遵守YAML缩进规则:
Configuration: status: warn name: DefaultConfig # 多属性变量必须用数组形式声明 properties: property: - name: log-path value: /var/work/logs/my-service - name: log-name value: my-service Appenders: RollingFile: - name: RollingFileAppender # 直接使用变量即可正常解析 fileName: "${log-path}/${log-name}.log" filePattern: "${log-path}/${log-name}-%d{yyyy-MM-dd}-%i.log.gz" PatternLayout: pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" Policies: SizeBasedTriggeringPolicy: size: 10MB DefaultRolloverStrategy: max: 10 Loggers: Root: level: info AppenderRef: ref: RollingFileAppender
常见错误写法(别踩坑)
很多人会把多个属性写成平级键值对,导致YAML解析时覆盖重复键,Log4j2无法识别多个变量:
# 错误写法:重复的name/value会被覆盖,仅最后一个属性生效 Configuration: properties: property: name: log-path value: /var/work/logs/my-service name: log-name value: my-service
原理说明
Log4j2对YAML配置的properties节点有明确要求:单个属性可以用单键值对,多个属性必须用数组列表(每个元素是独立的property对象),这样Log4j2才能正确加载所有变量并完成替换。
内容的提问来源于stack exchange,提问作者Trong Nghia Vu
相关产品推荐
相关产品推荐

