Skip to main content

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

Release files for loggingx-py 0.12.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for loggingx-py 0.12.0
File Size Uploaded
loggingx_py-0.12.0.tar.gz 19.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for loggingx-py 0.12.0
File Interpreter ABI Platform
loggingx_py-0.12.0-py3-none-any.whl Python 3 none any Details

Total release size: 27.5 kB

Release files / loggingx_py-0.12.0.tar.gz

Download URL loggingx_py-0.12.0.tar.gz
Size 19.5 kB
Tags Source
SHA-256 checksum
How to use checksums
cf7378d9bb305a018cdb1433027ba6f951b26492d107c2a91eb77459a95e30ac
BLAKE2b-256 checksum
How to use checksums
cf84e575e1b976b82fd2a8792b296440d6b6f7e8d1b6f6c3438b9207b475c52b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.8.18

Release files / loggingx_py-0.12.0-py3-none-any.whl

Download URL loggingx_py-0.12.0-py3-none-any.whl
Size 8.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fb9b8b8b4e9fbf8c202a6881e808ef1a57613178ab62da0fec7192e6b21ece47
BLAKE2b-256 checksum
How to use checksums
3bd30b99204a3b6fcac86382f648402699e86401a2b56e7beb7ee7b08daa0724
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.8.18

Release history Release notifications | RSS feed

This release

0.12.0 This release

2 release files

0.11.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page