我可以在测试期间创建具有寿命的记录器吗?

时间:2019-08-07 12:02:13

标签: logging junit cucumber log4j2 slf4j

我有一个应用程序,可以从UI运行单元测试。我使用JUnit API(不是来自Maven)运行测试。我也用黄瓜。当用户在我的应用程序黄瓜中运行测试时,创建新的应用程序上下文(用于测试)。此外,在业务逻辑实现方面,我应该将来自测试的日志写入单独的文件中,并在测试完成后将其发送到UI。因此,我的应用每次运行测试都应创建新的日志文件,完成后将其发送并删除。此外,我对我的应用程序使用SLF4J-Log4j2绑定。当我尝试为所有应用程序使用SLF4J-Log4j2绑定编写日志时,我最终无法删除日志文件,因为它们由记录器使用。我可以只为测试阶段创建其他记录器,还是可以配置现有的记录器以在测试完成后发布日志文件? 附言我试图在删除文件之前先删除当前的附加程序,但它不起作用

<?xml version="1.0" encoding="UTF-8"?>

<Configuration status="DEBUG">

    <Properties>
        <Property name="filename">${sys:catalina.home}/odysseyLogs</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout
                pattern="%d{HH:mm:ss} %-5level %logger{1} - %msg%n" />
        </Console>

        <File name="File-other" fileName="${filename}/other.txt"
            append="false">
            <PatternLayout
                pattern="%d{yyy-MM-dd HH:mm:ss} [%t] %-5level %logger{5} - %msg%n" />
            <NoMarkerFilter onMatch="ACCEPT" onMismatch="DENY" />
        </File>

        <File name="File-env14" fileName="${filename}/bin/target/env14.txt"
            append="false">
            <PatternLayout
                pattern="%d{yyy-MM-dd HH:mm:ss} | %-5level | %c{1.} - %msg%n" />

            <MarkerFilter marker="env_14" onMatch="ACCEPT" onMismatch="DENY"/>
        </File>

    </Appenders>

    <Loggers>

        <Root level="debug">

            <AppenderRef ref="Console" />
            <AppenderRef ref="File-other" level="debug" />
            <AppenderRef ref="File-env14" level="info" />

        </Root>

    </Loggers>

</Configuration> 

1 个答案:

答案 0 :(得分:0)

对于您的用例,我建议创建一个滚动文件附加程序,该附加程序配置有一个文件模式,其中包含正在运行的测试的系统属性。然后,我将在测试开始时设置测试的名称,并在测试结束时手动触发过渡。