【问题标题】:Replacing multiple values in logback替换logback中的多个值
【发布时间】:2018-07-20 11:30:27
【问题描述】:

我正在尝试替换 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;

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

【问题讨论】:

    标签: cassandra logback


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢,这正在工作!此外,为了不仅可以替换密码中的文字,我还修改了正则表达式以替换除引号 ([^']*) 之外的所有内容。将进行更多测试,但似乎它正在使用 CQL 更新语句中的所有列名顺序组合。
    猜你喜欢
    • 2021-12-17
    • 2021-07-12
    • 2011-12-23
    • 2022-01-22
    • 2021-01-05
    • 2013-07-06
    • 2023-03-15
    • 2016-03-29
    • 2020-06-15
    相关资源
    最近更新 更多