4

全部!

对于我们的一个项目,我们正在使用 Jenkins 持续集成系统。构建过程非常繁重,会产生很多不同的日志。为了使日志更易于阅读,我决定创建一个 Jenkins 插件,它将重新格式化日志并使它们更具可读性。为此,我为 ConsoleLogFilter 创建了一个扩展。那里唯一一个被覆盖的方法现在看起来像这样:

public OutputStream decorateLogger(AbstractBuild abstractBuild, OutputStream outputStream) throws IOException, InterruptedException {
    FilterOutputStream filter = new FilterOutputStream(outputStream) {
           private String currentLogMessage = "";
           @Override
           public void write( int data ) throws IOException {
               switch (data) {
                   case '\n':
                       if (currentLogMessage.startsWith("+")) {
                           currentLogMessage = "<span style='color: darkgray; font-size: 10pt'>" + currentLogMessage + "</span>";
                       }
                       currentLogMessage += Character.toString ((char) data);
                       out.write( currentLogMessage.getBytes() );
                       System.out.println(currentLogMessage);
                       currentLogMessage = "";
                       break;
                   default:
                       currentLogMessage += Character.toString ((char) data);
                       break;
               }
           }
       };

    return filter;
}

这个问题显得非常棘手。这个装饰器做得很好,在 Jenkins 日志中我看到消息正确地用 HTML-span 包装(System.out.println(...) 的结果)。它看起来像这样:

<span style='color: darkgray; font-size: 10pt'>+ some log content</span>
<span style='color: darkgray; font-size: 10pt'>+ some log content</span>
<span style='color: darkgray; font-size: 10pt'>+ some log content</span>

但是当涉及到浏览器时,似乎所有像 < 这样的开始标记符号都被替换为 < 并且浏览器无法正确解析此格式

&lt;span style='color: darkgray; font-size: 10pt'>+ some log content&lt;/span>
&lt;span style='color: darkgray; font-size: 10pt'>+ some log content&lt;/span>
&lt;span style='color: darkgray; font-size: 10pt'>+ some log content&lt;/span>

有没有人看到这个问题?有什么办法可以解决吗?

4

0 回答 0