Logging

Logging utilities.

ColoredFormatter

ColoredFormatter(fmt=None, datefmt=None, style='%', validate=True, *, defaults=None)

A class for formatting colored logs.

Default colors:
- DEBUG: blue
- INFO: green
- WARNING: yellow
- ERROR: red
- CRITICAL: red

Examples:
    import logging
    from pymince.logging import ColoredFormatter

    # Config
    logger = logging.getLogger('mylog')
    logger.setLevel('DEBUG')

    stream_handler = logging.StreamHandler()
    stream_handler.setFormatter(ColoredFormatter(logging.BASIC_FORMAT))
    logger.addHandler(stream_handler)

    # Use default colors
    logger.debug("This is debug") # blue color

    # Use custom colors
    import colorama

    black = colorama.Fore.BLACK
    bold_black_on_green = colorama.Back.GREEN + colorama.Fore.BLACK + colorama.Style.BRIGHT
    bold_green_on_black = colorama.Back.BLACK + colorama.Fore.GREEN + colorama.Style.BRIGHT

    logger.debug("This is debug", extra={"color": black})
    logger.debug("This is debug", extra={"color": bold_black_on_green})
    logger.debug("This is debug", extra={"color": bold_green_on_black})

ColoredLogger

ColoredLogger(name=None, level=10, **fmt_kwargs)

Custom logger to generate color logs.

Examples:
    from pymince.logging import ColoredLogger

    logger = ColoredLogger()

    # Use default colors
    logger.debug("This is debug") # blue color

    # Use custom colors
    import colorama
    logger.debug("This is debug", extra={"color": colorama.Fore.BLACK})

StructuredFormatter

StructuredFormatter(fmt=None, datefmt=None, style='%', validate=True, *, defaults=None)

Implementation of JSON structured logging that works
for most handlers.

Examples:
    import logging
    import sys
    from pymince.logging import StructuredFormatter

    # Config
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)
    formatter = StructuredFormatter('%(message)s')
    handler = logging.StreamHandler(sys.stdout)
    handler.setLevel(logging.DEBUG)
    handler.setFormatter(formatter)
    logger.addHandler(handler)

    # Usage
    logger.debug('', {"string": "value1", "number": 1})
    logger.debug('', {"string": "value2", "number": 2})

    >>Output<<
    {"timestamp":"2022-06-17 18:37:48,789","level":"DEBUG","payload":{"string":"value1","number":1}}
    {"timestamp":"2022-06-17 18:37:48,789","level":"DEBUG","payload":{"string":"value2","number":2}}