Part of our switch application uses 20+ single threaded process to handle transactions, each process handles a small part of the transaction processing then sends a request to the next process. Eventually the last process replies and the reply messages are sent back in reverse order.
Our applications all write their trace to their own log files, and this is not very useful for diagnosing problems. So the trace layer also sends all trace to a debug server process, also when ever a process sends or receives a message this info is sent to the debug server with a unique id for the message. This enabled the debug server to join all the messages together an enables us to get a system view for each transaction.
Obviously this is very resource intensive, so by default is off on a busy system, but it can be turned on and the trace level set at runtime to diagnose issues both on site and in development.