<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style='font-size: 10pt; font-family: Verdana,Geneva,sans-serif'>
<p>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:</p>
<div dir="ltr">
<div class="gmail_quote">
<div dir="ltr">
<div><br /><span style="font-family: monospace,monospace;">$ cat server.log client.log | python eliottree.py <br />e076ca50-9abc-44b2-95d8-85cf6956bc33<br />    +-- main@1/started<br />        |-- process: client<br />        `-- timestamp: 2015-04-28 16:50:00.379033<br />    +-- eliot:remote_task@2,2,1/started<br />        |-- process: server<br />        `-- timestamp: 2015-04-28 16:50:00.389533<br />        +-- http_request@2,1/started<br />            |-- process: client<br />            |-- timestamp: 2015-04-28 16:50:00.379096<br />            |-- x: 8<br />            `-- y: 0<br />        +-- divide@2,2,2,1/started<br />            |-- process: server<br />            |-- timestamp: 2015-04-28 16:50:00.389674<br />            |-- x: 8<br />            `-- y: 0<br />            +-- divide@2,2,2,2/failed<br />                |-- exception: exceptions.ZeroDivisionError<br />                |-- process: server<br />                |-- reason: integer division or modulo by zero<br />                `-- timestamp: 2015-04-28 16:50:00.389724<br />            +-- eliot:remote_task@2,2,3/failed<br />                |-- exception: exceptions.ZeroDivisionError<br />                |-- process: server<br />                |-- reason: integer division or modulo by zero<br />                `-- timestamp: 2015-04-28 16:50:00.389750<br />        +-- http_request@2,3/failed<br />            |-- exception: requests.exceptions.HTTPError<br />            |-- process: client<br />            |-- reason: 500 Server Error: INTERNAL SERVER ERROR<br />            `-- timestamp: 2015-04-28 16:50:00.396112<br />    +-- main@3/failed<br />        |-- exception: requests.exceptions.HTTPError<br />        |-- process: client<br />        |-- reason: 500 Server Error: INTERNAL SERVER ERROR<br />        `-- timestamp: 2015-04-28 16:50:00.396181<br /></span></div>
Intrigued? Learn more at <a href="https://eliot.readthedocs.org">https://eliot.readthedocs.org</a>.<br /><br /><span style="font-family: monospace,monospace;">eliottree.py</span> is an add-on utility for formatting Eliot logs, and can be found at <a href="https://github.com/jonathanj/eliottree">https://github.com/jonathanj/eliottree</a></div>
</div>
</div>
<div> </div>
</body></html>