Skip to main content

Drop-in replacement for Python's built-in `logging` module

Project description

license pypi language

loggingx.py

loggingx is a drop-in replacement for Python's built-in logging module. Even better, once you've imported loggingx, you don't need to modify your existing logging module.

python3 -m pip install loggingx-py

Additional Format

Attribute name Format Description
caller %(caller)s Caller(<pathname>:<lineno>)
ctxFields %(ctxFields)s Context fields

Optimization

Configuration Description
logging.logThreads If False, Record will not collect thread and threadName.
logging.logProcesses If False, Record will not collect process.
logging.logMultiprocessing If False, Record will not collect processName.

Context

import loggingx as logging

handler = logging.StreamHandler()
handler.setFormatter(logging.ConsoleFormatter())
logging.basicConfig(level=logging.INFO, handlers=[handler])


def A() -> None:
    logging.info("A")
    with logging.addFields(A="a"):
        B()


def B() -> None:
    logging.info("B")
    with logging.addFields(B="b"):
        C()


def C() -> None:
    logging.info("C")


if __name__ == "__main__":
    A()
2024-08-22T02:46:38.257+09:00 INFO   main.py:9  A {}
2024-08-22T02:46:38.257+09:00 INFO   main.py:15 B {"A": "a"}
2024-08-22T02:46:38.258+09:00 INFO   main.py:21 C {"A": "a", "B": "b"}

Formatter

JSONFormatter

import loggingx as logging

handler = logging.StreamHandler()
# handler.setFormatter(logging.JSONFormatter())
handler.setFormatter(logging.JSONFormatter(logging.Information.THREAD_NAME))
logging.basicConfig(level=logging.INFO, handlers=[handler])

if __name__ == "__main__":
    with logging.addFields(ctx="ctx"):
        logging.info("test", extra={"extra": "extra"})
{
  "time": 1689697694.9980711,
  "level": "info",
  "caller": "main.py:10",
  "msg": "test",
  "ctx": "ctx",
  "thread_name": "MainThread",
  "extra": "extra"
}

ConsoleFormatter

import loggingx as logging

handler = logging.StreamHandler()
handler.setFormatter(logging.ConsoleFormatter())
logging.basicConfig(level=logging.INFO, handlers=[handler])

if __name__ == "__main__":
    with logging.addFields(ctx="ctx"):
        logging.info("test", extra={"extra": "extra"})
2024-08-22T02:48:17.868+09:00 INFO   main.py:9  test {"ctx": "ctx", "extra": "extra"}

With logging

import logging

import loggingx

# handler = loggingx.StreamHandler()
handler = logging.StreamHandler()
handler.setFormatter(loggingx.JSONFormatter())

# loggingx.basicConfig(level=loggingx.INFO, handlers=[handler])
logging.basicConfig(level=logging.INFO, handlers=[handler])

if __name__ == "__main__":
    with loggingx.addFields(ctx="ctx"):
        # loggingx.info("test", extra={"extra": "extra"})
        logging.info("test", extra={"extra": "extra"})

orjson

If orjson is installed, this module will use orjson instead of json.

jq

alias log2jq="jq -rRC --unbuffered '. as \$line | try fromjson catch \$line' | sed 's/\\\\n/\\n/g; s/\\\\t/\\t/g'"
python3 <path> 2>&1 | log2jq

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

loggingx_py-0.12.0.tar.gz (19.5 kB view details)

Uploaded Source

Built Distribution

loggingx_py-0.12.0-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file loggingx_py-0.12.0.tar.gz.

File metadata

  • Download URL: loggingx_py-0.12.0.tar.gz
  • Upload date:
  • Size: 19.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.18

File hashes

Hashes for loggingx_py-0.12.0.tar.gz
Algorithm Hash digest
SHA256 cf7378d9bb305a018cdb1433027ba6f951b26492d107c2a91eb77459a95e30ac
MD5 1d566c36dba6e1735a2d4f7733af62d6
BLAKE2b-256 cf84e575e1b976b82fd2a8792b296440d6b6f7e8d1b6f6c3438b9207b475c52b

See more details on using hashes here.

File details

Details for the file loggingx_py-0.12.0-py3-none-any.whl.

File metadata

File hashes

Hashes for loggingx_py-0.12.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fb9b8b8b4e9fbf8c202a6881e808ef1a57613178ab62da0fec7192e6b21ece47
MD5 f75a8a99ad024525a85a1be26ee90f3f
BLAKE2b-256 3bd30b99204a3b6fcac86382f648402699e86401a2b56e7beb7ee7b08daa0724

See more details on using hashes here.

Supported by

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