如何在Ant JUnit Task中设置其他Java Logger FileHandler?

时间:2011-11-17 12:31:49

标签: java ant junit

我有一个奇怪的任务。给出了以下(剥离的)代码(但我无法更改/增强它):

public class CustomTestClass {

    /**
     * Logger.
     */
    private Logger logger = Logger.getLogger("com.custom.testing");

    @Test
    public void simpleTestCaseOne(){
        logger.warning("simpleTestCaseOne: Not yet implemented!");
        assertTrue(true);
    }

    @Test
    public void simpleTestCaseTwo(){
        logger.warning("simpleTestCaseTwo: Not yet implemented!");
        assertTrue(true);
    }
}



现在我使用以下Ant-Code来运行测试:

<target name="Junit_Test" 
        depends="compile.test" description="Custom TestCase Runner">
        <junit printsummary="yes" haltonfailure="no" fork="yes">
            <jvmarg value="-Djava.util.logging.config.file=res/logging.properties" />
            <classpath>
                <path refid="tests.class.path" />
                <fileset dir="${src.tests}">
                    <include name="**/*Test*.java"/>
                </fileset>
            </classpath>
            <test name="com.custom.testing.CustomTestClass" 
                haltonfailure="no" 
                todir="${reports.tests}/xml"
                methods="simpleTestCaseOne" >
                   <formatter type="xml" />
            </test>
        </junit>
    </target>

logging.properties文件只定义 ConsoleHandler FileHandler 以及TestClass记录器的输出文件。

当我运行ant脚本时,它实际上工作正常,但我需要重新运行几次测试并每次都更改 FileHandler 的输出文件。

是否可以为指定的Logger 添加/更改FileHandler而无需更改代码

1 个答案:

答案 0 :(得分:0)

我不是特别喜欢这个,但是......

您可以在属性java.util.logging.FileHandler.pattern的值中创建一个带有可替换标记的日志记录配置文件,例如

java.util.logging.FileHandler.pattern=%h/logs/@LOGFILE@.log

然后,您可以使用带有copy task的Ant filterset替换令牌,例如

<copy file="res/logging_tmp.properties" toFile="res/logging.properties" force="true">
  <filterset>
    <filter token="LOGFILE" value="your_value"/>
  </filterset>
</copy>

您可以在每次执行单元测试之前进行复制,每次都指定不同的值。