Java 记录器和System.out.println的输出不正常
我希望在eclipse控制台中有logger和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
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工作正常。谢谢你的建议。我按顺序调用这些方法,所以它们也应该按顺序执行,不是吗?由于多线程同时执行,我不理解你在我的例子中关于多线程的观点