ant-contrib foreach:如何在日志中识别正确的并行目标

时间:2016-02-26 11:18:49

标签: ant sonarqube ant-contrib

我使用Ant-contrib foreach任务运行SonarQube分析,并进行并行目标调用。

问题是日志显示为[foreach]的一部分,因为记录了并发执行,因此很难阅读。

  [foreach] 01:18:12.054 INFO  - Initializing Hibernate
  [foreach] 01:18:12.065 INFO  - Initializing Hibernate
  [foreach] 01:18:12.098 INFO  - Initializing Hibernate
  [foreach] 01:18:16.504 ERROR - Server ID is invalid. Please check settings.
  [foreach] 01:18:16.517 ERROR - Server ID is invalid. Please check settings.
  [foreach] 01:18:16.530 ERROR - Server ID is invalid. Please check settings.
  [foreach] 01:18:16.533 ERROR - Server ID is invalid. Please check settings.
  [foreach] 01:18:17.360 INFO  - Load project repositories
  [foreach] 01:18:17.363 INFO  - Load project repositories

在上面的示例中,重复的行指的是不同的执行(每个特定项目的执行)。

有没有办法识别foreach循环中的每个执行(例如,[foreach:project1],[foreach:project2])?

否则,可以采用哪种其他策略来改善这一点?

我想知道是否可以实现一个Log Decorator,它在执行时根据循环中的变量在每个日志中添加前缀。

1 个答案:

答案 0 :(得分:0)

每个Ant任务都支持taskname属性。 taskname的值决定了" banner"在任务记录消息时使用:

的build.xml

<project name="ant-taskname" default="run">
    <taskdef resource="net/sf/antcontrib/antlib.xml" />
    <target name="my-echo">
        <echo taskname="echo-${letter}">Letter ${letter}.</echo>
    </target>
    <target name="run">
        <foreach list="a,b,c" target="my-echo" param="letter" parallel="true"/>
    </target>
</project>

输出

run:

my-echo:

my-echo:

my-echo:
   [echo-b] Letter b.
   [echo-a] Letter a.
   [echo-c] Letter c.

即使[echo-b]任务实际记录了消息,输出也会显示<echo>等横幅。您可以针对Sonar任务调整此解决方案。