如何在log4j2.properties中为KafkaAppender配置KeyValuePair
Log4j2.properties中KafkaAppender配置KeyValuePair的正确方法
你当前的问题是:在log4j2.properties文件中为KafkaAppender的JSONLayout配置KeyValuePair时无法生效,但相同逻辑在XML配置中可以正常工作,其他KafkaAppender配置均正常。
你的错误properties配置:
appender.kafka=org.apache.kafka appender.kafka.type= kafka appender.kafka.name= kafkaAppender appender.kafka.topic= NewTopic appender.kafka.property.type=Property appender.kafka.property.name=bootstrap.servers appender.kafka.property.value=host:ip appender.kafka.property2.type=Property appender.kafka.property2.name=group.id appender.kafka.property2.value=new_group_id appender.kafka.layout.type = JSONLayout appender.kafka.property3.type=KeyValuePair <--- 不生效 appender.kafka.property3.name=originalGuid <--- 不生效 appender.kafka.property3.value= value <--- 不生效
可正常工作的XML配置:
<Kafka name="kafkaLogAppender" topic="${kafka.topic.logs}"> <JsonLayout> <KeyValuePair key="guid" value="$${ctx:guid:-}"/> <KeyValuePair key="originalGuid" value="$${ctx:originalGuid:-}"/> <KeyValuePair key="gateGroupCode" value="$${ctx:gateGroupCode:-}"/> <KeyValuePair key="037Message" value="$${ctx:037Message:-}"/> <KeyValuePair key="titleMessage" value="$${ctx:titleMessage:-}"/> </JsonLayout> <Property name="bootstrap.servers">${bootstrap.servers}</Property> <Property name="group.id">${group.id}</Property> <MarkerFilter marker="${audit.logmarker}" onMatch="DENY" onMismatch="ACCEPT"/> </Kafka>
正确的properties配置方式
问题出在KeyValuePair的层级错误:XML中KeyValuePair是JsonLayout的子元素,对应到properties配置中,必须将其挂在layout节点下,而不是直接作为KafkaAppender的子属性。
修改后的完整配置:
appender.kafka=org.apache.kafka appender.kafka.type= Kafka appender.kafka.name= kafkaAppender appender.kafka.topic= NewTopic # Kafka客户端配置(对应XML中的<Property>) appender.kafka.property.type=Property appender.kafka.property.name=bootstrap.servers appender.kafka.property.value=host:ip appender.kafka.property2.type=Property appender.kafka.property2.name=group.id appender.kafka.property2.value=new_group_id # JSONLayout配置 appender.kafka.layout.type=JSONLayout # 为JSONLayout添加KeyValuePair,注意层级是layout.keyValuePairN appender.kafka.layout.keyValuePair.type=KeyValuePair appender.kafka.layout.keyValuePair.key=originalGuid appender.kafka.layout.keyValuePair.value=value # 如果需要多个KeyValuePair,使用keyValuePair1、keyValuePair2递增命名 appender.kafka.layout.keyValuePair1.type=KeyValuePair appender.kafka.layout.keyValuePair1.key=guid appender.kafka.layout.keyValuePair1.value=${ctx:guid:-} appender.kafka.layout.keyValuePair2.type=KeyValuePair appender.kafka.layout.keyValuePair2.key=gateGroupCode appender.kafka.layout.keyValuePair2.value=${ctx:gateGroupCode:-}
关键说明
- Log4j2的properties配置严格遵循层级对应:XML中父元素的子元素,在properties中要通过
父节点.子节点的方式嵌套。 - 多个同类型子元素(比如多个KeyValuePair),需要通过在名称后加数字(如
keyValuePair1、keyValuePair2)来区分,数字从0或1开始均可。 - 注意属性名的匹配:XML中用
key,properties中对应也是key,而不是你之前错误使用的name。
内容的提问来源于stack exchange,提问作者Sezer Aydın
相关产品推荐
相关产品推荐

