Skip to main content

Logging as Storytelling

Project description

Coveralls test coverage information Build Status

Eliot provides a structured logging and tracing system for Python that generates log messages describing a forest of nested actions. Actions start and eventually finish, successfully or not. Log messages thus tell a story: what happened and what caused it.

Here’s what your logs might look like before using Eliot:

Going to validate
Started download attempted.
Download succeeded!
Missing <title> element in "/html/body".
Bad HTML entity in "/html/body/p[2]".
2 validation errors found!

After switching to Eliot you’ll get a tree of messages with both message contents and causal relationships encoded in a structured format:

  • {"action_type": "validate_page", "action_status": "started", "url": ""}
    • {"action_type": "download", "action_status": "started"}
    • {"action_type": "download", "action_status": "succeeded"}
    • {"action_type": "validate_html", "action_status": "started"}
      • {"message_type": "validation_error", "error_type": "missing_title", "xpath": "/html/head"}
      • {"message_type": "validation_error", "error_type": "bad_entity", "xpath": "/html/body/p[2]"}
    • {"action_type": "validate_html", "action_status": "failed", "exception": "validator.ValidationFailed"}
  • {"action_type": "validate_page", "action_status": "failed", "exception": "validator.ValidationFailed"}


  • Structured, typed log messages.
  • Ability to log actions, not just point-in-time information: log messages become a trace of program execution.
  • 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

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
eliot-0.5.0-py2.py3-none-any.whl (58.4 kB) Copy SHA256 hash SHA256 Wheel any
eliot-0.5.0.tar.gz (81.2 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page