eliot is a free, open source monitoring & observability project written in Python and released under Apache-2.0. It has 1,189 GitHub stars, 73 forks and 120 open issues, and was last pushed 4 months ago. On this registry it ranks #89 of 97 tracked projects in Monitoring & Observability, with 5 head-to-head comparisons available.

What is eliot?

Eliot is a Python logging library that records causal chains of actions rather than a flat stream of unrelated factoids, and it is for Python developers and scientific-computing teams who need to answer why a code path ran, why an error happened, or where time went.

What it is

Eliot is a logging system for Python that models application behaviour as a tree of actions. Each action can spawn child actions, and every action eventually either succeeds or fails, so the emitted logs form the story of what the software did and what caused it. Instead of writing lines of text to a stream, the application describes its work in terms of actions, and Eliot serialises that structure.

The concrete problem it solves is causation. Python's built-in logging module and similar systems output a stream of factoids that are interesting but do not explain what is going on: standard logging cannot answer why an application is slow, what caused a particular code path to be chosen, or why an error happened. Eliot replaces that flat, uncorrelated stream with causal chains, so a developer can pinpoint performance bottlenecks, understand what happened when, and see who called what. It lives in the Python ecosystem and is distributed on PyPI and conda-forge.

Key capabilities

  • Action-based causal logging, where actions spawn other actions and each one ends in success or failure, producing a traceable narrative rather than isolated lines.
  • Causal tracing across a distributed system, so work spanning multiple processes can still be related back to its origin.
  • Built-in support for NumPy and Dask, aimed at scientific-computing workloads.
  • Support for asyncio and Trio coroutines, plus the Twisted networking framework.
  • Task UUIDs that can be attached to downstream error reports; the README testimonial describes sending Eliot task UUIDs to Sentry so a notification links back to a high-level trace with metadata at each operation.
  • Structured log output designed to be aggregated and stored by tools such as Logstash and ElasticSearch when running across multiple machines.
  • Runs on Python 3.10 through 3.14, and on PyPy 3.11.

Who uses it and how

  • Single-process Python applications that need to explain their own control flow and timing.
  • Distributed systems where causal tracing has to cross process and machine boundaries, with logs shipped onward to an aggregation stack.
  • Scientific-computing pipelines using NumPy and Dask, where understanding which stage is slow matters as much as the result.
  • Asynchronous services built on asyncio, Trio, or Twisted, where interleaved coroutines make conventional log streams hard to read.
  • Teams that already route errors to Sentry and want each notification to resolve to a trace with per-operation metadata, as described in the README testimonial.

Getting started

Install from PyPI with pip install eliot, or from conda-forge. Commercial support is available from Python⇒Speed.

How it compares

The nearest named alternative in the project's own framing is Python's built-in logging, which Eliot characterises as producing a stream of factoids that cannot answer why questions. Logstash and ElasticSearch are not competitors but complements: Eliot generates the logs, and those tools aggregate and store them once multiple processes or machines are involved.

When to use it — and when not to

A self-hoster running several processes across several machines must also operate an aggregation stack such as Logstash and ElasticSearch, because Eliot only generates logs and does not store or search them. Anyone wanting a turnkey hosted observability product, or a team unwilling to instrument code in terms of actions, should look elsewhere. The project carries 120 open issues and is maintained by a single person, Itamar Turner-Trauring, which is a real bus-factor consideration despite the recent commit activity.

project readme (upstream, from github) — read inline

Eliot: Logging that tells you why it happened

Python's built-in logging and other similar systems output a stream of factoids: they're interesting, but you can't really tell what's going on.

  • Why is your application slow?
  • What caused this code path to be chosen?
  • Why did this error happen?

Standard logging can't answer these questions.

But with a better model you could understand what and why things happened in your application. You could pinpoint performance bottlenecks, you could understand what happened when, who called what.

That is what Eliot does. eliot is a Python logging system that outputs causal chains of actions: actions can spawn other actions, and eventually they either succeed or fail. The resulting logs tell you the story of what your software did: what happened, and what caused it.

Eliot supports a range of use cases and 3rd party libraries:

  • Logging within a single process.
  • Causal tracing across a distributed system.
  • Scientific computing, with built-in support for NumPy and Dask _.
  • Asyncio and Trio coroutines _ and the Twisted networking framework _.

Eliot is only used to generate your logs; you will might need tools like Logstash and ElasticSearch to aggregate and store logs if you are using multiple processes across multiple machines.

Eliot supports Python 3.10-3.14, as well as PyPy 3.11. It is maintained by Itamar Turner-Trauring, and released under the Apache 2.0 License.

  • Read the documentation _.
  • Download from PyPI_ or conda-forge _.
  • Need help or have any questions? File an issue _ on GitHub.
  • Commercial support is available from Python⇒Speed _.

Testimonials

"Eliot has made tracking down causes of failure (in complex external integrations and internal uses) tremendously easier. Our errors are logged to Sentry with the Eliot task UUID. That means we can go from a Sentry notification to a high-level trace of operations—with important metadata at each operation—in a few seconds. We immediately know which user did what in which part of the system."

—Jonathan Jacobs

.. _Github: https://github.com/itamarst/eliot .. _PyPI: https://pypi.python.org/pypi/eliot

Frequently asked questions

Is eliot free to use?

eliot is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does eliot do?

Eliot: the logging system that tells you *why* it happened

What is eliot written in?

eliot is primarily written in Python. Its source is publicly available at https://github.com/itamarst/eliot, and it has 1,189 GitHub stars.