Log4J JsonTemplateLayout 替换消息内容

问题描述 投票:0回答:1

我用于记录 Log4J

我的附加程序配置

    <RollingFile name="FILE-LOGSTASH"
                 fileName="C:\Users\p.bohomaz\IdeaProjects\o2-lcm\log4j-logstash.log"
                 filePattern="C:\Users\p.bohomaz\IdeaProjects\o2-lcm\log4j-logstash-%d{yyyy-MM-dd-HH}.log.gz">
        <LogStashJsonLayout/>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        </Policies>
    </RollingFile>

我的问题是,有时在日志中我会收到普通的电话号码 我想将其替换为 3********9

我发现 LogStashJsonLayout 已弃用,没有此选项,我需要使用 JsonTemplateLayout

所以我将我的配置更改为这个

    <RollingFile name="FILE-LOGSTASH"
                 fileName="C:\Users\p.bohomaz\IdeaProjects\o2-lcm\log4j-logstash.log"
                 filePattern="C:\Users\p.bohomaz\IdeaProjects\o2-lcm\log4j-logstash-%d{yyyy-MM-dd-HH}.log.gz">
        <JsonTemplateLayout eventTemplateUri="classpath:EcsLayout.json"/>

        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        </Policies>
    </RollingFile>

和我的 json 模板文件

 {
  "@version": "1",
  "@timestamp": {
    "$resolver": "timestamp",
    "pattern": {
      "format": "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
      "timeZone": "UTC"
    }
  },
  "logger": {
    "$resolver": "logger",
    "field": "name"
  },
  "priority": {
    "$resolver": "level",
    "field": "name"
  },
  "thread": {
    "$resolver": "thread",
    "field": "name"
  },
  "message": {
    "$resolver": "message",
    "replace": {
      "regex": "(\\d{2})(\\d{7,11})(\\d{2})",
      "replacement": "$1********$3"
    }
  }
}

但我仍然在日志中看到普通数字 我检查了文档,发现我需要使用 pattern.replace(regex,replacement) 但它也不起作用 有人可以帮忙吗? 是否可以在模板中执行此操作还是我需要为其创建过滤器?

java logging log4j logstash
1个回答
0
投票

JSON 模板布局的

message
解析器没有
replace
配置 - 请参阅其文档。您可以使用
pattern
解析器
回退到模式布局并使用
replace
转换器

{
  "message": {
    "$resolver": "pattern",
    "pattern": "%replace{%msg}{(\\d{2})(\\d{7,11})(\\d{2})}{$1********$3}"
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.