替换登录中的多个值

时间:2018-07-20 11:30:27

标签: 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;

有人可以建议为什么会发生这种情况以及如何解决它,或者还有其他解决方法吗?

1 个答案:

答案 0 :(得分:0)

这是一个问题,正则表达式模式拾取的次数超出了您的预期,因此替换操作相互覆盖。

我复制了您看到的问题,然后将正则表达式更改为仅包含字母数字(\ 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