我在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);
}
}
当我运行所有测试时,我期待输出如[信息的类信息被忽略]
**** 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显示消息?是这样的吗?如果是这样,有没有办法解决乱搞顺序的问题?感谢。
答案 0 :(得分:0)
您对SLF4J使用哪种日志框架?可能是日志框架配置为在后台线程中异步写入日志消息。
您可以尝试用System.out.println()
替换日志调用,看看是否会产生您期望的输出。如果是,您可能需要重新配置日志记录框架以同步记录消息。