delfick_project.logging.setup_logging(log=None, level=20, program='', syslog_address='', tcp_address='', udp_address='', only_message=False, json_to_console=False, logging_handler_file=<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>)

Setup the logging handlers


if you configure the logs to go to the console (and not as json strings), then they will use colors if you have ‘rainbow_logging_handler==2.2.2’ installed in your python environment.


The log to add the handler to.

  • If this is a string we do logging.getLogger(log)
  • If this is None, we do logging.getLogger(“”)
  • Otherwise we use as is
The level we set the logging to

The program to give to the logs.

If syslog is specified, then we give syslog this as the program.

If tcp_address, udp_address or json_to_console is specified, then we create a field in the json called program with this value.

syslog_address, tcp_address, udp_address

If none of these is specified, then we log to the console.

Otherwise we use the address to converse with a remote server.

Only one will be used.

If syslog is specified that is used, otherwise if udp is specified that is used, otherwise tcp.

Defaults to False. When True and we haven’t specified syslog/tcp/udp address then write json lines to the console.
Whether to only print out the message when going to the console
The file to print to when going to the console
class delfick_project.logging.LogContext(initial=None, extra=None)

An object to represent logging context

One of these is provided as delfick_project.logging.lc

You use it by doing something like:

from delfick_project.logging import lc

import logging

log = logging.getLogger("myproject")

log.info(lc("Some logs", var1="one"))

ctx = lc.using(var2="two")
log.info(ctx("message", anotherarg=1))

Then as long as you’ve used setup_logging() the logger will understand the result of calling the logging context and display it nicely.

For printing to the console it’ll display the keyword argument as tab separated key=value pairs whereas all other outputs will get the log as a json object.

__call__(*args, **kwargs)

Return a dictionary of {"msg": " ".join(args), **kwargs}


Return a new logging context with these extra context

unsafe_add_context(key, value)

Mutate the current logging context