1

我在 Eclipse 项目中有一个 JUnit 类。如下所示:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/*some other imports*/

public class _JunitTests{
    final Logger logger = LoggerFactory.getLogger(_JunitTests.class);   
    public void test(int num){
            logger.info("**** tests no."+num+" ***");
            /* some code */
    }   
    @Test
    public static void test1() {
            test(1);
    } 
    @Test
    public static void test2() {
            test(2);
    } 
    @Test
    public static void test3() {
            test(3);
    } 
    @Test
    public static void test1() {
            test(1);
    } 
}

当我运行所有测试时,我期望输出诸如[忽略 info 的类信息]

**** tests no.1 ***
/* somethings */

**** tests no.2 ***
/* somethings */

**** tests no.3 ***
/* somethings */

但是,控制台中显示的结果通常是混乱的,例如:

**** tests no.1 ***
**** tests no.2 ***
**** tests 
/* somethings */

no.3 ***
/* somethings */
/* somethings */

当有异常消息时,这种情况在我的其他代码之前经常发生。

我之前的猜测是 stderr 和 stdout 是在不同的线程中处理的,因此结果将没有特定的顺序显示。

由于来自 Logger 的信息在 Eclipse 控制台中也是红色的,我的猜测是它使用 stderr 来显示消息?是这样吗?如果是这样,有没有办法解决乱序的问题?谢谢。

4

1 回答 1

0

您在 SLF4J 中使用哪种日志记录框架?可能是日志框架配置为在后台线程中异步写入日志消息。

您可以尝试用 a 替换日志调用,System.out.println()看看是否会产生您期望的输出。如果是这样,您可能需要重新配置日志框架以同步记录消息。

于 2013-08-10T11:12:46.013 回答