Skip to content

πŸ”΄ unaiverse.utils.logger

What this module does πŸ”΄

Custom logging framework providing colored output (Ch), a feature-rich internal logger (_Logger) with custom severity levels, and the public Logger facade exposed project-wide as log.

logger

β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆβ–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–ˆ β–‘ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–‘ β–‘β–ˆβ–ˆβ–ˆ β–ˆ β–‘ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆβ–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆ β–‘β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘ β–‘β–ˆβ–ˆβ–ˆ β–‘ β–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘ β–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ β–‘β–‘β–‘β–‘β–‘ β–‘β–‘β–‘β–‘β–‘ β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ β–‘β–‘β–‘β–‘β–‘ β–‘β–‘β–‘ β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ β–‘β–‘β–‘β–‘β–‘ β–‘β–‘β–‘β–‘β–‘ β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ A Collectionless AI Project (https://collectionless.ai) Registration/Login: https://unaiverse.io Code Repositories: https://github.com/collectionlessai/ Main Developers: Stefano Melacci (Project Leader), Christian Di Maio, Tommaso Guidi

ALWAYS_ON_CHANNELS module-attribute

ALWAYS_ON_CHANNELS: frozenset[Ch] = frozenset({CRITICAL, ERROR, USER})

EXTRA_CHANNELS module-attribute

EXTRA_CHANNELS: frozenset[Ch] = frozenset({NETWORK, STREAMS, INTER, MISC, DEBUG, STATEM, CPOOL, P2P})

ALL_CHANNELS module-attribute

ALL_CHANNELS: frozenset[Ch] = frozenset(ALWAYS_ON_CHANNELS | EXTRA_CHANNELS)

SUB_PRV module-attribute

SUB_PRV = 'prv'

SUB_PUB module-attribute

SUB_PUB = 'pub'

SUB_GEN module-attribute

SUB_GEN = 'gen'

log module-attribute

log = Logger()

Ch

Bases: str, Enum

Enumeration of independent, non-hierarchical log output channels.

Each channel represents a distinct concern of the application, not a severity tier. Every channel can be individually enabled or disabled for screen output and for file persistence at runtime via _Logger.enable, _Logger.disable, _Logger.enable_screen, and _Logger.disable_screen.

CRITICAL, ERROR, and USER are always-on channels: they cannot be suppressed by disable or disable_screen. All other channels are optional and can be toggled freely.

Channel descriptions:

  • CRITICAL - Fatal conditions. Always written to file and screen. Calling _Logger.critical also raises a GenException.
  • ERROR - Non-fatal errors and warnings.
  • USER - Output intended for the end user (human-readable app output).
  • STATEM - Per-clock-cycle full app state snapshots.
  • NETWORK - Networking events: connections, disconnections, message routing.
  • STREAMS - Stream-level data-flow events: tokens, buffers, lifecycle.
  • INTER - Inter-node / cross-instance communication events (RPCs, coordination).
  • MISC - Miscellaneous / uncategorized internal output.
  • DEBUG - Fine-grained developer diagnostics; off by default.
  • CPOOL - Connection pool lifecycle events (slots, eviction, limits).
  • P2P - Raw output captured from the underlying Go libp2p library (stdout/stderr).

Subdomain tag (sub= kwarg, available on every channel):

Every channel supports an optional sub= tag to identify which subdomain the record belongs to. The three standard values are:

  • "pub" - public network side
  • "prv" - private network side
  • "gen" - generic / not subdomain specific (default when omitted)

Pass sub= explicitly to override the sticky tag set via set_sub::

log.network("peer connected",  sub="pub", peer=pid)
log.network("relay heartbeat", sub="prv", relay=rid)
log.streams("token received",  sub="pub", tokens=12)
log.statem("state snapshot",   sub="prv", mode="IDLE")
log.debug("internal trace",    sub="prv")
log.misc("startup",            sub="gen")   # same as omitting sub=

The tag is stored as a top-level "sub" field in every JSON record (parallel to "ch", not inside "info"). When sub= is omitted the sticky value set by set_sub is used; if that is also unset the record gets "sub": "gen" automatically.

CRITICAL class-attribute instance-attribute

CRITICAL = 'CRITICAL'

ERROR class-attribute instance-attribute

ERROR = 'ERROR'

USER class-attribute instance-attribute

USER = 'USER'

STATEM class-attribute instance-attribute

STATEM = 'STATEM'

NETWORK class-attribute instance-attribute

NETWORK = 'NETWORK'

STREAMS class-attribute instance-attribute

STREAMS = 'STREAMS'

INTER class-attribute instance-attribute

INTER = 'INTER'

MISC class-attribute instance-attribute

MISC = 'MISC'

DEBUG class-attribute instance-attribute

DEBUG = 'DEBUG'

CPOOL class-attribute instance-attribute

CPOOL = 'CPOOL'

P2P class-attribute instance-attribute

P2P = 'P2P'

Logger

Logger()
Source code in unaiverse/utils/logger.py
def __init__(self):

    # Default instance, expected to be overwritten by calling create(...) when the application has enough info
    # to decide how to set up the logger
    self.__instance = None  # _Logger(name="logger", file_enabled=False)

create

create(*args, **kwargs)
Source code in unaiverse/utils/logger.py
def create(self, *args, **kwargs):
    self.__instance = _Logger(*args, **kwargs)

set_print_fcn

set_print_fcn(*args, **kwargs)
Source code in unaiverse/utils/logger.py
def set_print_fcn(self, *args, **kwargs):
    self.__instance.set_print_fcn(*args, **kwargs)