Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 记录器和System.out.println的输出不正常_Java_Logging_Inputstream_Bufferedreader_Java.util.logging - Fatal编程技术网

Java 记录器和System.out.println的输出不正常

Java 记录器和System.out.println的输出不正常,java,logging,inputstream,bufferedreader,java.util.logging,Java,Logging,Inputstream,Bufferedreader,Java.util.logging,我希望在eclipse控制台中有logger和inputstream的输出。但每次执行时,结果总是不一样。我有几个类,其中一个主类调用其他类,我将logger放到每个方法中进行调试。我将结果打印到控制台。我还可以将inputstream检索为string,并将其打印到控制台中 输出示例 mai 19, 2015 4:10:58 PM ScriptPack.Section findSection INFO: findSection OK mai 19, 2015 4:10:58 PM Script

我希望在eclipse控制台中有logger和
inputstream的输出。但每次执行时,结果总是不一样。我有几个类,其中一个主类调用其他类,我将logger放到每个方法中进行调试。我将结果打印到控制台。我还可以将
inputstream
检索为
string
,并将其打印到控制台中

输出示例

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
然后我重新执行,得到不同的命令

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
,应该进行组装。我尝试在每种方法中加入synchronized,但都不起作用。如果我把
Thread.sleep()
放在哪里?是否还有其他安全的方法来同步输出?

如果您知道希望每个线程等待的时间,可以使用wait来代替sleep。 或者用一根线锁定和打开另一根线。。。这完全取决于你的需要。 当使用多线程时,除非它们不同时工作,否则结果永远不会完全相同。 如果订单无效,您需要进行一些更改。 尝试使用一个线程池族对象。 这里有一个可能有用的教程

通过对问题的评论中的讨论,该问题已得到解决。我将此信息发布为一个答案,以防其他人有相同的问题,并在搜索时发现此问题


如果未完成特定配置,记录器API通常会将日志记录输出到stderr
。调用
System.out.println()
当然会转到
stdout

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


要了解如何为logger API执行此操作,您必须查看logger的文档。对于
System.out.println()
(以及其他打印方法),您必须切换到
System.err
,即
System.err.println()
,反之亦然。

您的日志设置如何。是打印到
stdout
还是
stderr
?关于日志API外部打印的行的相同问题?如果它们不同,输出的差异可能是因为
stdout
被缓冲,而
stderr
没有缓冲。我在每个类中使用相同的记录器:私有静态记录器theLogger=logger.getLogger(“文件1”)。然后将logger.info(Thread.currentThread().getStackTrace()[1].getMethodName().toString()+“OK”)放在ieach方法中。除了日志记录之外,我还使用System.out.println()打印到控制台中。我使用System.err.println来打印inputstream,但仍然存在日志记录器通常打印到
stderr
的相同问题(如果没有专门配置为执行其他操作)。您是否设置了任何特定的日志记录配置?如果没有,并且您不知道如何更改,则可以更轻松地将
System.out.println
更改为
System.err.println
,以查看您的问题是否消失。System.err.println工作正常。谢谢你的建议。我按顺序调用这些方法,所以它们也应该按顺序执行,不是吗?由于多线程同时执行,我不理解你在我的例子中关于多线程的观点