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 で使用するロギング フレームワークはどれですか? ロギング フレームワークがログ メッセージをバックグラウンド スレッドで非同期に書き込むように構成されている可能性があります。

log 呼び出しを a に置き換えてみて、System.out.println()期待する出力が生成されるかどうかを確認できます。その場合は、ログ フレームワークを再構成して、メッセージを同期的にログに記録することをお勧めします。

于 2013-08-10T11:12:46.013 に答える