Imagine you have a client that sends a request to a server and gets back a 500 error. What caused it? If you're using Eliot you can trace the logs across processes:
$ cat server.log client.log | python eliottree.py e076ca50-9abc-44b2-95d8-85cf6956bc33 +-- main@1/started |-- process: client `-- timestamp: 2015-04-28 16:50:00.379033 +-- eliot:remote_task@2,2,1/started |-- process: server `-- timestamp: 2015-04-28 16:50:00.389533 +-- http_request@2,1/started |-- process: client |-- timestamp: 2015-04-28 16:50:00.379096 |-- x: 8 `-- y: 0 +-- divide@2,2,2,1/started |-- process: server |-- timestamp: 2015-04-28 16:50:00.389674 |-- x: 8 `-- y: 0 +-- divide@2,2,2,2/failed |-- exception: exceptions.ZeroDivisionError |-- process: server |-- reason: integer division or modulo by zero `-- timestamp: 2015-04-28 16:50:00.389724 +-- eliot:remote_task@2,2,3/failed |-- exception: exceptions.ZeroDivisionError |-- process: server |-- reason: integer division or modulo by zero `-- timestamp: 2015-04-28 16:50:00.389750 +-- http_request@2,3/failed |-- exception: requests.exceptions.HTTPError |-- process: client |-- reason: 500 Server Error: INTERNAL SERVER ERROR `-- timestamp: 2015-04-28 16:50:00.396112 +-- main@3/failed |-- exception: requests.exceptions.HTTPError |-- process: client |-- reason: 500 Server Error: INTERNAL SERVER ERROR `-- timestamp: 2015-04-28 16:50:00.396181 Intrigued? Learn more at https://eliot.readthedocs.org. eliottree.py is an add-on utility for formatting Eliot logs, and can be found at https://github.com/jonathanj/eliottree -- https://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations/