替换 logback 中的多个值
Replacing multiple values in logback
我正在尝试替换记录 Cassandra CQL 语句的 logback 记录器中的多个值,并使用此 post 中的示例:
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 CQL 语句的 logback 记录器中的多个值,并使用此 post 中的示例: 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