Синхронизировать System.out и System.err

При отладке кода я часто использую System.out и System.err. Проблема в том, что когда возникает исключение, и я использую System.out, в то же время результат выглядит не очень организованным.

[CLIENT]:postinit: vic.rpg.gui.GuiMain.init()
java.net.ConnectException: Connection refused: connect
[CLIENT]:Destroying Network Thread...
[CLIENT]:done!
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
...
[CLIENT]:Starting Server...

Это не очень серьезно, но иногда это немного затрудняет чтение журналов.


person Vic    schedule 10.02.2014    source источник
comment
У вас не было бы таких проблем, если бы вы использовали правильную структуру ведения журнала.   -  person assylias    schedule 10.02.2014


Ответы (1)


Вы можете избежать этой проблемы, вызывая flush каждый раз при записи в любой из потоков. например.:

System.out.println ("Writing to *out*");
System.out.flush ();

Если вы ведете журнал из разных потоков, ваши сообщения журналов будут естественным образом чередоваться. Если вы хотите четко разделить вывод по потокам, я бы предложил использовать библиотеку ведения журналов, например log4j. .

person Tony the Pony    schedule 10.02.2014
comment
Я уже оборачивал System.out в свой собственный PrintStream, добавление super.flush() к каждому методу действительно работало. - person Vic; 10.02.2014