Yes it is true that err messages can be printed on the screen out of order. But in my tests even at 1000Hz that only happens when the error `ROS_ERROR` is called within 0.3ms after a `ROS_INFO`.
But I don't see how this can be worse than how it is now. If output is set to log, then error messages are not logged at all to file, so I wouldn't even know that an error occured when checking the log files...

Btw, without `stdbuf` on linux the order gets really messed up, because then the err messages are instantly written to screen while out messages are buffered and written in batches.

The problem with the temporal order can be easily fixed by using 
```
self.popen = subprocess.Popen(self.args, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=full_env, close_fds=True, preexec_fn=os.setsid)
```
instead of
```
self.popen = subprocess.Popen(self.args, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=full_env, close_fds=True, preexec_fn=os.setsid)
```
and redirecting stderr to stdout. then the tee only reads from stdout and always in the order that the node is outputting. But then err and out will go to the same log file. Why do you need to print out and err messages to different log files in any case? that only makes analysing log files the more difficult because they have to be synchronized.

I propose the following solution which I am going to add to the indigo-devel branch and issue in a new PR:

For output = both
-> stderr will be redirected to stdout, this will keep temporal order intact on screen and log file, but err messages will be written with out messages to logfileout. 
-> no stderr log file

For output = log
-> stdout will be written to logfileout
-> stderr will be written to screen and logfileerr
-> temporal order not intact, but doesn't matter because files are separated and only err messages are shown on screen

For output = screen
-> stays as is, no multiplexing is needed