Skip to main content

Package to simplify setting formatting for multiple logging levels

Project description

CI codecov CodeQL

MultiLevelLogger

MultiLevelLogger is a Python logging.Logger that simplifies setting log formats for different log levels. Log records with level logging.ERROR or higher are printed to STDERR by default. Motivation for the class has been the use of logging package for CLI verbosity control (--verbose, --debug):

  1. Define shortcuts for printing different level information instead of using print() :
import multilevellogger

logger = multilevellogger.getMultiLevelLogger(__name__)
error = logger.error
message = logger.message
verbose = logger.verbose
debug = logger.debug
  1. Set logging level based on CLI option given. Mapping of logging levels:
CLI option logging level
--debug logging.DEBUG
--verbose multilevellogger.VERBOSE
default multilevellogger.MESSAGE
--silent logging.ERROR
# Not complete, does not run
def main() -> None:
    
    ...

    # assumes command line arguments have been parsed into 
    # boolean flags: arg_verbose, arg_debug, arg_silent
    
    LOG_LEVEL: int = multilevellogger.MESSAGE
    if arg_verbose: 
        LOG_LEVEL = multilevellogger.VERBOSE
    elif arg_debug:
        LOG_LEVEL = logging.DEBUG
    elif arg_silent:
        LOG_LEVEL = logging.ERROR
    logger : MultiLevelLogger = getMultiLevelLogger(__name_)
    logger.setLevel(LOG_LEVEL)
    logger.addLogFile(log_file=file_to_log, level=logging.INFO)

See the example below for more details.

Install

Python 3.11 or later is required.

pip install git+https://github.com/Jylpah/multilevellogger.git

Example

Full runnable example below. It can be found in demos/ folder.

import logging
from typer import Typer, Option  # type: ignore
from typing import Annotated, Optional
from pathlib import Path
from multilevellogger import getMultiLevelLogger, MultiLevelLogger, VERBOSE, MESSAGE

logger: MultiLevelLogger = getMultiLevelLogger(__name__)
error = logger.error
warning = logger.warning
message = logger.message
verbose = logger.verbose
info = logger.info
debug = logger.debug

app = Typer()

@app.callback(invoke_without_command=True)
def cli(
    print_verbose: Annotated[
        bool,
        Option(
            "--verbose",
            "-v",
            show_default=False,
            help="verbose logging",
        ),
    ] = False,
    print_debug: Annotated[
        bool,
        Option(
            "--debug",
            show_default=False,
            help="debug logging",
        ),
    ] = False,
    print_silent: Annotated[
        bool,
        Option(
            "--silent",
            show_default=False,
            help="silent logging",
        ),
    ] = False,
    log: Annotated[Optional[Path], Option(help="log to FILE", metavar="FILE")] = None,
) -> None:
    """MultilevelFormatter demo"""
    global logger

    try:
        LOG_LEVEL: int = MESSAGE  # type: ignore
        if print_verbose:
            LOG_LEVEL = VERBOSE
        elif print_debug:
            LOG_LEVEL = logging.DEBUG
        elif print_silent:
            LOG_LEVEL = logging.ERROR
        logger.setLevel(LOG_LEVEL)
        if log is not None:
            logger.addLogFile(log_file=log)

        logger.setLevel(LOG_LEVEL)
    except Exception as err:
        error(f"{err}")
    debug("debug")
    info("info")
    message("message")
    verbose("verbose")
    warning("warning")
    error("error")

if __name__ == "__main__":
    app()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

multilevellogger-0.7.1.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

multilevellogger-0.7.1-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file multilevellogger-0.7.1.tar.gz.

File metadata

  • Download URL: multilevellogger-0.7.1.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for multilevellogger-0.7.1.tar.gz
Algorithm Hash digest
SHA256 c4cc54b4ed96c6b60ed55da56d8c03289ec76cb6d3a701a1badd0e9cb11f3acf
MD5 976d07ddfcdc189b008af7af4c89077e
BLAKE2b-256 94ca4c5ad919e23dd3da9d27bf7c1fecba1f0b4338a1f0167b94778a5f5d9e5e

See more details on using hashes here.

File details

Details for the file multilevellogger-0.7.1-py3-none-any.whl.

File metadata

File hashes

Hashes for multilevellogger-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2c46e6aaf3e1e7efda434ccd130b1f986d41a122b2b641d4f6790a0f0e18a862
MD5 766304d1a05124ee28457610515d466b
BLAKE2b-256 aed06a8fb676233bdb65e032df60dd46cc039c32285ab2226b3c3d864a0bcecc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page