Logger和System.out.println的输出不正确 [英] Output of Logger and System.out.println are not in order

查看:94
本文介绍了Logger和System.out.println的输出不正确的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在Eclipse控制台中获得logger的输出和 inputstream 。但是每次执行时,结果总是不相同。我有几个类,其中一个主类可以调用其他主类,并且将logger放在每种方法中进行调试。我将结果打印到控制台。我也有方法检索 inputstream 作为 string 并将其打印到控制台中。

I want to have the output of logger and inputstream in the eclipse console. But everytime I execute, the result is always not in the same order. I have several classes with one main class to call the others and I put logger to each method for debugging. I print the result to console. I also have the method to retrieve the inputstream as string and print it into console.

输出示例

mai 19, 2015 4:10:58 PM ScriptPack.Section findSection
INFO: findSection OK
mai 19, 2015 4:10:58 PM ScriptPack.Section convertStringToTestCase
INFO: convertStringToTestCase OK
mai 19, 2015 4:10:58 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:10:58 PM ScriptPack.TestCase getName
INFO: getName OK
//Error. 
//**********EasyTest Test Report**********
//Test Case: testCase/test1.tc
//Result  : FAILED
//Start at: 2015-05-19-T16:10:58.479
mai 19, 2015 4:10:58 PM ScriptPack.TestCase settIterationNumber
INFO: settIterationNumber OK
mai 19, 2015 4:10:58 PM ScriptPack.TestCase getIterationNumber
INFO: getIterationNumber OK
mai 19, 2015 4:10:58 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
Iteration number : 1
mai 19, 2015 4:10:58 PM ScriptPack.TestCase getName
INFO: getName OK
//**********EasyTest Test Report**********
//Test Case: testCase/test2.tc
mai 19, 2015 4:10:59 PM ScriptPack.TestCase setIsPassed
INFO: setIsPassed OK
//Result  : PASSED
//Start at: 2015-05-19-T16:10:58.838
Iteration number : 1
mai 19, 2015 4:10:59 PM ScriptPack.TestCase settIterationNumber
INFO: settIterationNumber OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getIterationNumber
INFO: getIterationNumber OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getName
INFO: getName OK
//**********EasyTest Test Report**********
//Test Case: testCase/test3.tc
mai 19, 2015 4:10:59 PM ScriptPack.TestCase setIsPassed
INFO: setIsPassed OK
//Result  : PASSED
//Start at: 2015-05-19-T16:10:59.229
mai 19, 2015 4:10:59 PM ScriptPack.TestCase settIterationNumber
INFO: settIterationNumber OK
Iteration number : 1
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getIterationNumber
INFO: getIterationNumber OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCaseList verifyList
INFO: verifyList NOK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getName
INFO: getName OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase settIterationNumber
INFO: settIterationNumber OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getIterationNumber
INFO: getIterationNumber OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:10:59 PM ScriptPack.TestCaseList verifyList
INFO: verifyList NOK
//Error. 
//**********EasyTest Test Report**********
//Test Case: testCase/test1.tc
//Result  : FAILED
//Start at: 2015-05-19-T16:10:59.635
Iteration number : 2

然后我重新执行并获得不同的订单

Then I re-execute and get different order

mai 19, 2015 4:13:24 PM ScriptPack.Section findSection
INFO: findSection OK
mai 19, 2015 4:13:24 PM ScriptPack.Section convertStringToTestCase
INFO: convertStringToTestCase OK
mai 19, 2015 4:13:24 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:13:24 PM ScriptPack.TestCase getName
INFO: getName OK
//Error. 
//**********EasyTest Test Report**********
//Test Case: testCase/test1.tc
//Result  : FAILED
//Start at: 2015-05-19-T16:13:24.321
mai 19, 2015 4:13:24 PM ScriptPack.TestCase settIterationNumber
INFO: settIterationNumber OK
mai 19, 2015 4:13:24 PM ScriptPack.TestCase getIterationNumber
INFO: getIterationNumber OK
Iteration number : 1
mai 19, 2015 4:13:24 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:13:24 PM ScriptPack.TestCase getName
INFO: getName OK
//**********EasyTest Test Report**********
//Test Case: testCase/test2.tc
mai 19, 2015 4:13:25 PM ScriptPack.TestCase setIsPassed
INFO: setIsPassed OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase settIterationNumber
INFO: settIterationNumber OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getIterationNumber
INFO: getIterationNumber OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getName
INFO: getName OK
//Result  : PASSED
//Start at: 2015-05-19-T16:13:24.789
Iteration number : 1
//**********EasyTest Test Report**********
//Test Case: testCase/test3.tc
//Result  : PASSED
//Start at: 2015-05-19-T16:13:25.228
mai 19, 2015 4:13:25 PM ScriptPack.TestCase setIsPassed
INFO: setIsPassed OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase settIterationNumber
INFO: settIterationNumber OK
Iteration number : 1
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getIterationNumber
INFO: getIterationNumber OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCaseList verifyList
INFO: verifyList NOK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getName
INFO: getName OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase settIterationNumber
INFO: settIterationNumber OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getIterationNumber
INFO: getIterationNumber OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
mai 19, 2015 4:13:25 PM ScriptPack.TestCase getIsPassed
INFO: getIsPassed OK
//Error. 
//**********EasyTest Test Report**********
//Test Case: testCase/test1.tc
//Result  : FAILED
//Start at: 2015-05-19-T16:13:25.587
Iteration number : 2
mai 19, 2015 4:13:25 PM ScriptPack.TestCaseList verifyList
INFO: verifyList NOK

该行以双斜杠开头,来自 inputstream 并应进行汇编。我尝试使每种方法保持同步,但不起作用。如果我放入 Thread.sleep(),应该放在哪里?还有其他安全方法可以同步输出吗?

The line starts with double slash comes from inputstream and should be assembled. I tried to put synchronized in each method but doesn't work. If I put Thread.sleep(), where should I put it? Is there any more safety way to synchronize the output?

推荐答案

该问题已通过注释中的讨论得到解决。这个问题。如果有人遇到相同的问题并在搜索时发现此问题,我会将此信息作为答案发布。

Logger API通常会在未完成特定配置的情况下将日志记录输出到 stderr 。调用 System.out.println()当然将转到 stdout

Logger API's usually outputs logging to stderr if no specific configuration has been done. Calls to System.out.println() will of course go to stdout.

将两种方法混合使用时,每次运行程序时输出到控制台的输出均不同的问题是由于通常缓冲 stdout ,而 stderr 不是。要解决这种问题,必须确保两种方法都打印到相同类型的输出流,都打印到 stdout 或都打印到 stderr

The problem with output to a console differing at each run of a program, when intermixing both methods, is due to the fact that stdout is usually buffered, while stderr is not. To fix this kind of problem, one has to make sure that both methods prints to the same type of outputstream, both to stdout or both to stderr.

要了解如何针对记录器API执行此操作,必须查看记录器的文档。对于 System.out.println()(和其他打印方法),您将不得不切换到 System.err 相反,即 System.err.println(),反之亦然。

To find out how to do this for the logger API, you have to look in the documentation for the logger. For System.out.println() (and the other print methods) you will have to switch to System.err instead, i.e. System.err.println(), or vise versa.

这篇关于Logger和System.out.println的输出不正确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆