2013-08-10 2 views
1

Eclipse 프로젝트에 JUnit 클래스가 있습니다. 나는 모든 테스트를 실행하면, 나는 그런 [무시 정보의 클래스 정보]로 출력을 기다리고 있었다Java 프로그램 출력이 Eclipse 콘솔에서 임의의 위치에 인쇄됩니다.

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

SLF4J에서 사용하는 로깅 프레임 워크는 무엇입니까? 로깅 프레임 워크가 로그 메시지를 백그라운드 스레드에 비동기 적으로 쓰도록 구성 될 수 있습니다.

로그 호출을 System.out.println()으로 바꾸고 예상되는 출력을 생성하는지 확인할 수 있습니다. 로그 프레임 워크를 다시 구성하여 메시지를 동 기적으로 기록 할 수 있습니다.

+1

오, 다른 출력 메시지는'System.out.println()'에 의해 생성됩니다. stdout과 동기화되도록 SLF4J를 구성 할 수 있습니까? – Will

+0

SLF4J는 다수의 로깅 프레임 워크에 대해 균일 로깅 API로 사용되는 facade API입니다. 구성은 사용중인 로깅 프레임 워크에서 이루어져야합니다. 예 : logback 또는 log4j. 구성을 만드는 방법은 시스템에서 사용하는 로깅 프레임 워크에 따라 다릅니다. – glerup

+1

알겠습니다. 고마워요. 그냥 광산이 '단순'바인딩이라는 것을 알았습니다. 기본값은 [stdersr'에 출력] (http://www.slf4j.org/apidocs/org/slf4j/impl/SimpleLogger.html)입니다. – Will

관련 문제