【问题标题】:Masking Log Output Value for Dynamic File Name in Logback XMLLogback XML 中动态文件名的屏蔽日志输出值
【发布时间】:2019-06-24 22:43:50
【问题描述】:

我需要在日志输出中隐藏一个值,该值用于为我的 Jenkins 作业生成 Cucumber 报告。这似乎是可能的唯一方法是修改 repo 的 logback.xml 文件。

我试过了:

<appender name="REPORT" class="ch.qos.logback.core.FileAppender">
    <immediateFlush>false</immediateFlush>
    <file>target/surefire-reports/*.html</file>
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'(?&lt;=api-key:).*', 'xxxx'}%n</pattern>
    </encoder>
</appender>

但我得到一个不正确的文件名错误:

16:58:44,485 |-ERROR in ch.qos.logback.core.FileAppender[REPORT] - openFile(target/surefire-reports/*.html,true) call failed. java.io.FileNotFoundException: target\surefire-reports\*.html (The filename, directory name, or volume label syntax is incorrect)
    at java.io.FileNotFoundException: target\surefire-reports\*.html (The filename, directory name, or volume label syntax is incorrect)

【问题讨论】:

    标签: xml jenkins-plugins logback karate


    【解决方案1】:

    这是路线图上的内容:https://github.com/intuit/karate/projects/3#card-22529225

    目前,您可以尝试对target/surefire-reports 文件夹中的所有*.json 文件(并删除*.xml 文件)运行蛮力正则表达式替换。确保在运行生成 cucumber-html-reports 的例程之前执行此操作。

    【讨论】:

    • 能够通过在运行器文件中添加掩码来实现,所以: jsonPaths.forEach(path -> { Path fullPath = Paths.get(path); try { String content = new String(Files .readAllBytes(fullPath), charset); content = content.replaceAll("(api-key: )(\\w*)", "api-key: masked"); Files.write(fullPath, content.getBytes(charset )); } catch (IOException e) { e.printStackTrace(); } } ) ;
    • @anutter 谢谢!我更新了这个问题的细节以帮助其他人,请随时添加:github.com/intuit/karate/issues/699#issuecomment-505779697
    【解决方案2】:

    当然,只要我一问,我就知道了……

    &lt;pattern&gt;%-5level - %replace(%msg){'(?&amp;lt;=api-key:).*', 'xxxx'}%n&lt;/pattern&gt;

    输出: 1 &gt; api-key:xxxx

    从 logback 文档中获取格式: https://logback.qos.ch/manual/layouts.html#cwOptions &lt;pattern&gt;%-5level - %replace(%msg){'\d{14,16}', 'XXXX'}%n&lt;/pattern&gt;

    而正则表达式是我用来屏蔽 Jenkins 日志输出的表达式,将左尖括号替换为 html &amp;lt;,因为它位于 xml 文件中。

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 2019-11-05
      • 2018-11-07
      • 2021-12-05
      • 2018-08-13
      • 2022-11-07
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      相关资源
      最近更新 更多