skip to navigation
skip to content

Not Logged In

eliot 0.7.1

Logging for Complex & Distributed Systems

Eliot is a Python 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'

Features:

  • Structured, typed log messages.
  • Ability to log actions, not just point-in-time information: log messages become a trace of program execution.
  • Logged actions can span processes and threads.
  • Excellent support for unit testing your code’s logging.
  • Emphasis on performance, including no blocking I/O in logging code path.
  • Optional Twisted support.
  • Designed for JSON output, usable by Logstash/Elasticsearch.
  • Supports CPython 2.7, 3.3, 3.4 and PyPy.
  • Eliot APIs provide both PEP 8 style (e.g. write_traceback()) and Twisted (e.g. writeTraceback()) method and function names. The only exceptions are pyunit-style assertions (e.g. assertContainsFields()) and Twisted-specific APIs since both use camelCase by default.

Eliot is released by ClusterHQ under the Apache 2.0 License.

To install:

$ pip install eliot

Downloads are available on PyPI.

Documentation can be found on Read The Docs.

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

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

 
File Type Py Version Uploaded on Size
eliot-0.7.1-py2.py3-none-any.whl (md5) Python Wheel 2.7 2015-04-28 62KB
eliot-0.7.1.tar.gz (md5) Source 2015-04-28 88KB
  • Downloads (All Versions):
  • 1687 downloads in the last day
  • 7033 downloads in the last week
  • 16479 downloads in the last month