[Twisted-Python] ANN: Eliot 0.6: Logging for Complex & Distributed Systems

Itamar Turner-Trauring itamar at itamarst.org
Wed Dec 10 11:19:57 MST 2014


 
Eliot is a logging system designed not only for simple applications but
for complex applications as well, including distributed systems. Eliot
supports simple structured messages but can also record a causal chain
of actions happening within and across process boundaries: a logical
trace of the system's operation. 

Structured, action-oriented logging is a great help when debugging
problems. For example, here are the combined logs of a request
originating from a client process being sent to a server. Notice how
easy it is to figure out the cause of the problem, even though it's
opaque to the client: 

process='client' task_uuid='40be6df2' task_level=[1] action_type='main'
 action_status='started'

process='client' task_uuid='40be6df2' task_level=[2, 1]
action_type='http_request'
 action_status='started' x=5 y=0

process='server' task_uuid='40be6df2' task_level=[2, 2, 1]
action_type='eliot:remote_task'
 action_status='started'

process='server' task_uuid='40be6df2' task_level=[2, 2, 2, 1]
action_type='divide'
 action_status='started' x=5 y=0

process='server' task_uuid='40be6df2' task_level=[2, 2, 2, 2]
action_type='divide'
 action_status='failed' exception='exceptions.ZeroDivisionError'
reason='integer division or modulo by zero'

process='server' task_uuid='40be6df2' task_level=[2, 2, 3]
action_type='eliot:remote_task'
 action_status='failed' exception='exceptions.ZeroDivisionError'
reason='integer division or modulo by zero'

process='client' task_uuid='40be6df2' task_level=[2, 3]
action_type='http_request'
 action_status='failed' exception='requests.exception.HTTPError'
reason='500 Server Error: INTERNAL SERVER ERROR'

process='client' task_uuid='40be6df2' task_level=[3] action_type='main'
 action_status='failed' exception='requests.exception.HTTPError'
reason='500 Server Error: INTERNAL SERVER ERROR'

WHAT'S NEW IN 0.6.0

Incompatible output format change! In previous versions the ordering of
messages and actions was ambiguous and could not be deduced from
out-of-order logs, and even where it was possible sorting correctly was
difficult. To fix this the action_counter field was removed and now all
messages can be uniquely located within a specific task by the values in
an _improved task_level field_ [1]. 

Features: 

 	* Eliot tasks can now _span multiple processes and threads_ [2],
allowing for easy tracing of actions in distributed applications.
 	* _eliot.add_global_fields_ [3] allows adding fields with specific
values to all Eliot messages logged by your program. This can be used to
e.g. distinguish between log messages from different processes by
including relevant identifying information.

Bug fixes: 

 	* On Python 3 files that accept unicode (e.g. sys.stdout) should now
work.

Downloads are available on PyPI [4]. 

Documentation can be found on Read The Docs [5]. 

Bugs and feature requests should be filed at the project Github page
[6]. 

You can ask for help on IRC at the #eliot channel on irc.freenode.net
[7]. 
 

Links:
------
[1] http://eliot.readthedocs.org/en/0.6.0/fields.html#task-fields
[2]
http://eliot.readthedocs.org/en/0.6.0/threads.html#cross-process-tasks
[3] http://eliot.readthedocs.org/en/0.6.0/output.html#add-global-fields
[4] https://pypi.python.org/pypi/eliot
[5] https://eliot.readthedocs.org/
[6] https://github.com/ClusterHQ/eliot
[7] http://irc.freenode.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://twistedmatrix.com/pipermail/twisted-python/attachments/20141210/ee1b1928/attachment.html>


More information about the Twisted-Python mailing list