contextual logging library, no patch, no logging module replacement
features
structured logging
contextual logging (via logger.bind)
(no conflicts (stdlib’s logging module))
example
main.py
from monokaki import basic_config, get_logger
import logging
logger = get_logger(__name__)
def run(log):
log.info("hello")
log.debug("hmm..")
def main():
log = logger.bind(name="foo")
run(log)
logger.info("bye")
# normal stdlib's logger
normallogger = logging.getLogger("stdlib's")
normallogger.info("hai")
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
"--logging", choices=list(sorted(logging._nameToLevel.keys())), default="INFO"
)
args = parser.parse_args()
basic_config(level=logging._nameToLevel[args.logging])
main()
$ python examples/readme/main.py
{"level": "INFO", "logger": "__main__", "msg": "hello", "name": "foo", "time": "2017-05-21 16:03:44,306"}
{"level": "INFO", "logger": "__main__", "msg": "bye", "time": "2017-05-21 16:03:44,307"}
INFO:stdlib's:hai
$ python examples/readme/main.py --logging=DEBUG
{"level": "INFO", "logger": "__main__", "msg": "hello", "name": "foo", "time": "2017-05-21 16:03:44,427"}
{"level": "DEBUG", "logger": "__main__", "msg": "hmm..", "name": "foo", "time": "2017-05-21 16:03:44,427"}
{"level": "INFO", "logger": "__main__", "msg": "bye", "time": "2017-05-21 16:03:44,428"}
INFO:stdlib's:hai
output customization
renderer.py
import json
from collections import OrderedDict
def ordered_json_render(data, record, formatter):
kwargs = OrderedDict()
# see: https://docs.python.org/3/library/logging.html#formatter-objects
kwargs["time"] = formatter.formatTime(record)
# see: https://docs.python.org/3/library/logging.html#logrecord-attributes
kwargs["level"] = record.levelname
kwargs["meg"] = record.msg
kwargs["caller"] = "{}:{}".format(record.pathname, record.lineno)
kwargs["source"] = record.name
# support exc_info or stack_info
if "stack" in data:
kwargs["stack"] = data["stack"]
# extra data
kwargs.update(record.kwargs)
return json.dumps(kwargs, indent=2)
main.py
from monokaki import get_logger, basic_config
logger = get_logger(__name__)
def main():
logger.bind(name="foo").info("hello", age=20)
logger.bind(name="foo").info("bye", age=21)
if __name__ == "__main__":
import logging
from renderer import ordered_json_render
basic_config(level=logging.INFO, renderer=ordered_json_render)
main()
$ python examples/customize-renderer/main.py
{
"time": "2017-05-21 16:03:44,645",
"level": "INFO",
"meg": "hello",
"caller": "examples/customize-renderer/main.py:6",
"source": "__main__",
"name": "foo",
"age": 20
}
{
"time": "2017-05-21 16:03:44,646",
"level": "INFO",
"meg": "bye",
"caller": "examples/customize-renderer/main.py:7",
"source": "__main__",
"name": "foo",
"age": 21
}
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
monokaki-0.1.1.tar.gz
(3.6 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file monokaki-0.1.1.tar.gz.
File metadata
- Download URL: monokaki-0.1.1.tar.gz
- Upload date:
- Size: 3.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bb4ac182dbe8cb20b7ce1270e47d3393e6885e2d57b5a0f72e8314526638eb6
|
|
| MD5 |
d08f027904f98a665ccf0a383f763660
|
|
| BLAKE2b-256 |
fd7652a8416b20863f3c2423fd338f5bcbe0d637b39220616d1356dca854acb9
|
File details
Details for the file monokaki-0.1.1-py2.py3-none-any.whl.
File metadata
- Download URL: monokaki-0.1.1-py2.py3-none-any.whl
- Upload date:
- Size: 5.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a816e60581e167af8c5e6c0bccf60e76a56c003f0ae224bc97202df7592731dc
|
|
| MD5 |
aa00e1626ec3098f91c04d8e964d90c9
|
|
| BLAKE2b-256 |
eb6fb54f3f5677ddbf751a464e49589a0a56900e0b33518109564f4e352e82b2
|