Development
===========
To make development a more pleasurable experience, ``structlog`` comes with the `structlog.dev` module.
The highlight is `structlog.dev.ConsoleRenderer` that offers nicely aligned and colorful (requires the `colorama package `_ if on Windows) console output.
If one of the `rich `_ or `better-exceptions `_ packages is installed, it will also pretty-print exceptions with helpful contextual data.
``rich`` takes precedence over ``better-exceptions``, but you can configure it by passing `structlog.dev.plain_traceback` or `structlog.dev.better_traceback` for the ``exception_formatter`` parameter of `ConsoleRenderer`.
The following output is rendered using ``rich``:
.. figure:: _static/console_renderer.png
:alt: Colorful console output by ConsoleRenderer.
You can find the code for the output above `in the repo `_.
To use it, just add it as a renderer to your processor chain.
It will recognize logger names, log levels, time stamps, stack infos, and ``exc_info`` as produced by ``structlog``'s processors and render them in special ways.
.. warning::
For pretty exceptions to work, `format_exc_info` must be **absent** from the processors chain.
``structlog``'s default configuration already uses `ConsoleRenderer`, therefore if you want nice colorful output on the console, you don't have to do anything except installing *colorama* and *better-exceptions*.
If you want to use it along with standard library logging, we suggest the following configuration:
.. code-block:: python
import structlog
structlog.configure(
processors=[
structlog.stdlib.add_logger_name,
structlog.stdlib.add_log_level,
structlog.stdlib.PositionalArgumentsFormatter(),
structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M.%S"),
structlog.processors.StackInfoRenderer(),
structlog.dev.ConsoleRenderer() # <===
],
context_class=dict,
logger_factory=structlog.stdlib.LoggerFactory(),
wrapper_class=structlog.stdlib.BoundLogger,
cache_logger_on_first_use=True,
)