coloured_logging

Documentation for eth_defi.coloured_logging Python module.

Coloured console logging helpers.

Functions

create_plain_log_handler(level, stream, fmt, ...)

Create a plain standard library stream log handler.

create_rich_log_handler(level, *, stream[, ...])

Create a Rich log handler for colour console output.

is_running_inside_docker()

Detect whether the current process runs inside a container.

resolve_log_level(level)

Resolve a logging level name or integer to a numeric level.

setup_console_logging([default_log_level, ...])

Set up coloured log output.

should_do_colour_logging(stream, *[, ...])

Determine whether console logging should use ANSI colours.

Classes

EthDefiRichHandler

Rich log handler that preserves eth_defi's module/thread fields.

TrailingSpaceStrippingStream

Stream wrapper that removes Rich's right-padding from redirected logs.

class EthDefiRichHandler

Bases: rich.logging.RichHandler

Rich log handler that preserves eth_defi’s module/thread fields.

Initializes the instance - basically setting the formatter to None and the filter list to empty.

__init__(*args, show_context=True, colour_threads=False, **kwargs)

Initializes the instance - basically setting the formatter to None and the filter list to empty.

Parameters
  • args (Any) –

  • show_context (bool) –

  • colour_threads (bool) –

  • kwargs (Any) –

Return type

None

get_thread_style(thread_name)

Get a stable Rich style for a thread name.

Parameters

thread_name (str) –

Return type

str

render_message(record, message)

Render log message with module and thread context.

Parameters
Return type

rich.text.Text

HIGHLIGHTER_CLASS

alias of rich.highlighter.ReprHighlighter

acquire()

Acquire the I/O thread lock.

addFilter(filter)

Add the specified filter to this handler.

close()

Tidy up any resources used by the handler.

This version removes the handler from an internal map of handlers, _handlers, which is used for handler lookup by name. Subclasses should ensure that this gets called from overridden close() methods.

createLock()

Acquire a thread lock for serializing access to the underlying I/O.

emit(record)

Invoked by logging.

Parameters

record (logging.LogRecord) –

Return type

None

filter(record)

Determine if a record is loggable by consulting all the filters.

The default is to allow the record to be logged; any filter can veto this by returning a false value. If a filter attached to a handler returns a log record instance, then that instance is used in place of the original log record in any further processing of the event by that handler. If a filter returns any other true value, the original log record is used in any further processing of the event by that handler.

If none of the filters return false values, this method returns a log record. If any of the filters return a false value, this method returns a false value.

Changed in version 3.2: Allow filters to be just callables.

Changed in version 3.12: Allow filters to return a LogRecord instead of modifying it in place.

flush()

Ensure all logging output has been flushed.

This version does nothing and is intended to be implemented by subclasses.

format(record)

Format the specified record.

If a formatter is set, use it. Otherwise, use the default formatter for the module.

get_level_text(record)

Get the level name from the record.

Args:

record (LogRecord): LogRecord instance.

Returns:

Text: A tuple of the style and level name.

Parameters

record (logging.LogRecord) –

Return type

rich.text.Text

handle(record)

Conditionally emit the specified logging record.

Emission depends on filters which may have been added to the handler. Wrap the actual emission of the record with acquisition/release of the I/O thread lock.

Returns an instance of the log record that was emitted if it passed all filters, otherwise a false value is returned.

handleError(record)

Handle errors which occur during an emit() call.

This method should be called from handlers when an exception is encountered during an emit() call. If raiseExceptions is false, exceptions get silently ignored. This is what is mostly wanted for a logging system - most users will not care about errors in the logging system, they are more interested in application errors. You could, however, replace this with a custom handler if you wish. The record which was being processed is passed in to this method.

release()

Release the I/O thread lock.

removeFilter(filter)

Remove the specified filter from this handler.

render(*, record, traceback, message_renderable)

Render log for display.

Args:

record (LogRecord): logging Record. traceback (Optional[Traceback]): Traceback instance or None for no Traceback. message_renderable (ConsoleRenderable): Renderable (typically Text) containing log message contents.

Returns:

ConsoleRenderable: Renderable to display log.

Parameters
  • record (logging.LogRecord) –

  • traceback (Optional[rich.traceback.Traceback]) –

  • message_renderable (rich.console.ConsoleRenderable) –

Return type

rich.console.ConsoleRenderable

setFormatter(fmt)

Set the formatter for this handler.

setLevel(level)

Set the logging level of this handler. level must be an int or a str.

class TrailingSpaceStrippingStream

Bases: object

Stream wrapper that removes Rich’s right-padding from redirected logs.

__init__(wrapped)
Parameters

wrapped (TextIO) –

Return type

None

write(text)

Write text while trimming trailing spaces before newlines.

Parameters

text (str) –

Return type

int

flush()

Flush the wrapped stream.

Return type

None

isatty()

Return the wrapped stream’s TTY status.

Return type

bool

is_running_inside_docker()

Detect whether the current process runs inside a container.

Docker and Compose logs do not usually present stdout/stderr as a TTY, but they preserve ANSI escape sequences. We use common container marker files and cgroup identifiers to enable colours for this case.

Returns

True if the process appears to run inside Docker or a compatible container runtime.

Return type

bool

should_do_colour_logging(stream, *, autodetect_docker_log=True)

Determine whether console logging should use ANSI colours.

Parameters
  • stream (TextIO) – Console stream that receives log output.

  • autodetect_docker_log (bool) – Enable colours when the process is inside Docker even if the stream is not a TTY. Enabled by default because Docker Compose preserves ANSI escape sequences in logs -f.

Returns

True if ANSI colour output should be enabled.

Return type

bool

create_rich_log_handler(level, *, stream, simplified_logging=False, coloured_threads=False)

Create a Rich log handler for colour console output.

Rich handles the timestamp and log level columns. We prepend module and thread information to the message so the output keeps the useful shape of the previous formatter while gaining Rich’s colours and highlighting.

Parameters
  • level (int) – Handler log level.

  • stream (TextIO) – Console stream that receives log output.

  • simplified_logging (bool) – Do not add module and thread fields when True.

  • coloured_threads (bool) – Use a stable per-thread colour palette when True.

Returns

Configured Rich handler.

Return type

eth_defi.coloured_logging.EthDefiRichHandler

create_plain_log_handler(level, stream, fmt, date_fmt)

Create a plain standard library stream log handler.

Parameters
  • level (int) – Handler log level.

  • stream (TextIO) – Console stream that receives log output.

  • fmt (str) – Logging format string.

  • date_fmt (str) – Date format string.

Returns

Configured standard stream handler.

Return type

logging.Handler

resolve_log_level(level)

Resolve a logging level name or integer to a numeric level.

Parameters

level (Union[str, int]) –

Return type

int

setup_console_logging(default_log_level='warning', *, simplified_logging=False, log_file=None, std_out_log_level=None, only_log_file=False, clear_log_file=True, coloured_threads=False, autodetect_docker_log=True, stream=None)

Set up coloured log output.

  • Helper function to have nicer logging output in tutorial scripts.

  • Tune down some noisy dependency library logging.

Parameters
  • default_log_level (Union[str, int]) – Default logging level if LOG_LEVEL is not set.

  • simplified_logging (bool) – Do not add module and thread fields when True.

  • log_file (Optional[Union[str, pathlib.Path]]) – Output both console and this log file.

  • std_out_log_level (Optional[Union[str, int]]) – Override the console logging level.

  • only_log_file (bool) – Do not install a console handler when True.

  • clear_log_file (bool) – Truncate the log file before writing when True.

  • coloured_threads (bool) – When True, each thread name in the log output gets a unique ANSI colour so interleaved parallel logs are easy to follow visually.

  • autodetect_docker_log (bool) – Enable coloured Rich output inside Docker even when stderr is not a TTY. Enabled by default because Docker Compose preserves ANSI escape sequences in logs -f.

  • stream (Optional[TextIO]) – Console stream that receives log output. Defaults to sys.stderr.

Returns

Root logger.

Return type

logging.Logger