相关疑难解决方法(0)

使用logback屏蔽日志中的敏感数据

我需要能够搜索事件中的任何一个模式,并用模板值替换模式中的文本.这是我们的应用程序中的一项功能,旨在防止敏感信息落入日志.由于信息可能来自各种各样的来源,因此在所有输入上应用过滤器是不切实际的.除了日志记录之外还有toString()的用法,我不希望toString()统一屏蔽所有调用(仅记录日志).

我尝试在logback.xml中使用%replace方法:

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'f k\="pin">(.*?)&lt;/f','f k\="pin">**********&lt;/f'}%n</pattern>
Run Code Online (Sandbox Code Playgroud)

这是成功的(在用字符实体替换尖括号后),但它只能替换单个模式.我也想表现相当于

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'pin=(.*?),','pin=**********,'}%n</pattern>
Run Code Online (Sandbox Code Playgroud)

同时,但不能.无法在一个%替换中屏蔽两个模式.

已经在interblags被松散讨论的另一种方法是延长的附加器/编码器/布局层次的东西,但每次试图拦截ILoggingEvent导致整个系统的崩溃,通常是通过实例化的错误或抛出UnsupportedOperationException.

例如,我尝试扩展PatternLayout:

@Component("maskingPatternLayout")
public class MaskingPatternLayout extends PatternLayout {

    @Autowired
    private Environment env;

    @Override
    public String doLayout(ILoggingEvent event) {
        String message=super.doLayout(event);

        String patternsProperty = env.getProperty("bowdleriser.patterns");

        if( patternsProperty != null ) {
            String[] patterns = patternsProperty.split("|");
            for (int i = 0; i < patterns.length; i++ ) {
                Pattern pattern = Pattern.compile(patterns[i]);
                Matcher matcher = pattern.matcher(event.getMessage());
                matcher.replaceAll("*");
            }
        } else {
            System.out.println("Bowdleriser not cleaning! …
Run Code Online (Sandbox Code Playgroud)

logback data-masking

13
推荐指数
2
解决办法
2万
查看次数

如何在logback中从Java堆栈中删除换行符?

我正在尝试从Java堆栈中删除换行符.

我遵循了logback模式 -

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'\n', ''}%n</pattern>
Run Code Online (Sandbox Code Playgroud)

我希望它能替换消息中的换行符,但它没有这样做.我看到用新行打印出的stacktraces.

但是,如果我使用以下模式(仅用于测试目的) -

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'.*', 'x'}%n</pattern>
Run Code Online (Sandbox Code Playgroud)

我发现消息正在被字符x替换,但堆栈跟踪仍然按原样打印.

这让我相信logback会独立地处理堆栈跟踪.我已经通过了logback文档,它说可以通过(%ex)引用stacktraes.

但是,我一次只能为一个appender激活一个模式.我如何确保我没有在stacktraces中获取换行符?

java regex logback

8
推荐指数
1
解决办法
5904
查看次数

标签 统计

logback ×2

data-masking ×1

java ×1

regex ×1