cassandra - 替换 logback 中的多个值

标签 cassandra logback

我正在尝试替换 logback 记录器中的多个值,该记录器记录了 Cassandra CQL 语句并使用了这篇文章中的示例:
Mask sensitive data in logs with logback

其中使用 %replace 函数的调用:

%replace(  %replace(%msg){'regex1', 'replacement1'}  ){'regex2', 'replacement2'}

就我而言,我想替换 3 个字段 - 姓名、姓氏和密码。使用的语句是:
%replace(%replace(%replace(%msg){"first_name='.*'", "first_name='xxxxx'"}){"last_name='.*'", "last_name='yyyyyy'"}){"password='.*'", "password='zzzzzz'"}%n

它似乎工作正常,但我注意到如果字段的顺序不同,有时会删除值。例如,

1)当语句按此顺序时就可以了:

执行:
UPDATE usertest.users SET password='secret_pw', last_name='Smith', first_name='John' where user_id = 1745;

记录:
UPDATE usertest.users SET password=zzzzzz, last_name=yyyyyy, first_name=xxxxx where user_id = 1745;

2) 在这种情况下,姓氏被删除

执行:
UPDATE usertest.users SET password='secret_pw', first_name='John', last_name='Smith' where user_id = 1745;

记录:
UPDATE usertest.users SET password=zzzzzz, first_name=xxxxx where user_id = 1745;

3)在这种情况下密码被删除

执行:
UPDATE usertest.users SET last_name='Smith', password='secret_pw', first_name='John' where user_id = 1745;

记录:
UPDATE usertest.users SET last_name=yyyyyy, first_name=xxxxx where user_id = 1745;

有人可以建议为什么它会发生以及如何修复它或者有其他方法可以解决吗?

最佳答案

这是一个问题,正则表达式模式比您预期的要多,因此替换会相互覆盖。

我重现了您看到的问题,然后将正则表达式更改为仅包含字母数字(\w 而不是 .),因此模式如下所示:

%replace(  %replace(  %replace(%msg){"first_name='\w*'", "first_name='xxxxx'"}  ){"last_name='\w*'", "last_name='yyyyyy'"}  ){"password='\w*'", "password='zzzzzz'"}%n

以下是一些测试:
UPDATE usertest.users SET password='secret_pw', last_name='Smith', first_name='John' where user_id = 1745;
UPDATE usertest.users SET last_name='Smith', first_name='John', password='secret_pw' where user_id = 1745;
UPDATE usertest.users SET first_name='John', password='secret_pw', last_name='Smith' where user_id = 1745;
UPDATE usertest.users SET first_name='John', last_name='Smith', password='secret_pw' where user_id = 1745;

以及记录结果:
Received: QUERY UPDATE usertest.users SET password='zzzzzz', last_name='yyyyyy', first_name='xxxxx' where user_id = 1745;[pageSize = 100], v=4/v4
Received: QUERY UPDATE usertest.users SET last_name='yyyyyy', first_name='xxxxx', password='zzzzzz' where user_id = 1745;[pageSize = 100], v=4/v4
Received: QUERY UPDATE usertest.users SET first_name='xxxxx', password='zzzzzz', last_name='yyyyyy' where user_id = 1745;[pageSize = 100], v=4/v4
Received: QUERY UPDATE usertest.users SET first_name='xxxxx', last_name='yyyyyy', password='zzzzzz' where user_id = 1745;[pageSize = 100], v=4/v4

关于cassandra - 替换 logback 中的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51441574/

相关文章:

java - 如何以编程方式在 xml 配置文件中设置属性?

cassandra - 获取 Cassandra 的日期范围 - 选择 timeuuid,IN 返回 0 行

java - Kryo 字节级追加

golang gocql 无法连接到 127.0.0.1 :9042 not enough bytes to read header require 9 got: 8

cassandra - 使用 Solr 集成时,DSE 创建的 Cassandra 索引的性质是什么?

cassandra - 是否需要使用所有定义为主键的列来查询 Cassandra 数据库?

java - 从 Logback 中的 Appender 获取当前布局?

java - Logback 将不同的消息记录到两个文件中

spring-boot - Spring boot logback 到文件在 tomcat 上不起作用

java - 我如何在Java中进行定时器登录并分析结果?