内置日志模块的JSON格式化程序
项目描述
jsonlog
Python的logging模块的即插即用格式化程序,将消息作为行分隔的JSON输出。
jsonlog提供了自己的basicConfig方法,您可以快速开始,但所有功能和类都可以与logging模块一起使用。
用法
您可以将jsonlog用作logging的即插即用替代品
import jsonlog
jsonlog.warning("Hello world.")
{"timestamp": "2019-06-21T19:06:25.285730", "level": "WARNING", "name": "root", "message": "Hello world."}
它实现为日志格式化程序,因此您可以使用logging就像您通常那样。
import jsonlog
import logging
jsonlog.basicConfig(level=jsonlog.INFO)
jsonlog.warning("Works with functions in the jsonlog module.")
logging.warning("And works with functions in the logging module.")
使用jsonlog.basicConfig进行配置
jsonlog.basicConfig函数接受与logging.basicConfig略有不同的参数。这里显示了每个参数的默认值。
filename、filemode和stream参数与logging.basicConfig中的等效参数工作方式相同,因此filename和stream是互斥的。
import jsonlog
jsonlog.basicConfig(
level=jsonlog.INFO,
indent=None,
keys=("timestamp", "level", "message"),
timespec="auto",
# filename=None,
# filemode="a",
# stream=None,
)
使用logging.config.dictConfig进行配置
您可以使用logging.config中的任何配置方法来配置一个使用jsonlog.formmatters.JSONFormatter将记录格式化为JSON的处理程序。
import logging.config
logging.config.dictConfig(
{
"version": 1,
"formatters": {"json": {"()": "jsonlog.JSONFormatter"}},
"handlers": {"stream": {"class": "logging.StreamHandler", "formatter": "json"}},
"loggers": {"": {"handlers": ["stream"]}},
}
)
向JSON输出添加额外属性
使用extra=提供的记录属性将包含在JSON对象中。
import jsonlog
import logging
jsonlog.basicConfig()
logging.warning("User clicked a button", extra={"user": 123})
{"timestamp": "2019-06-21T19:06:54.293929", "level": "WARNING", "name": "root", "message": "User clicked a button", "user": 123}
如果传递映射作为唯一的位置参数,则还将包含映射中的属性。
import jsonlog
import logging
jsonlog.basicConfig()
logging.warning("User clicked a button", {"user": 123})
管道
如果您想在命令行上读取它们,请尝试通过jq将日志通过管道传输!
python examples/hello.py 2> >(jq .)
{
"timestamp": "2019-06-21T19:07:43.211782",
"level": "WARNING",
"name": "root",
"message": "Hello world."
}
跟踪
跟踪作为单个字符串包含 - 它不是很好阅读,但它意味着它将与读取您输出的JSON日志的任何系统良好地配合。
{"timestamp": "2019-06-21T19:08:37.326897", "level": "ERROR", "name": "root", "message": "Encountered an error", "traceback": "Traceback (most recent call last):\n File \"examples/error.py\", line 6, in <module>\n raise ValueError(\"Example exception\")\nValueError: Example exception"}
如jq之类的工具使提取和读取跟踪变得容易
python examples/error.py 2> >(jq -r ".traceback")
Traceback (most recent call last):
File "examples/error.py", line 6, in <module>
raise ValueError("Example exception")
ValueError: Example exception
兼容性
jsonlog 是为 Python 3.7 及以上版本编写的。将接受 Python 3.5 及以上版本的兼容性补丁,但将拒绝 Python 2 的补丁。
要在 Python 3.6 上使用 jsonlog,您需要安装与它一起的 dataclasses 包。这不是一个依赖项,因为它会在 Python 3.7 及以上版本上安装时破坏内置的 dataclasses 模块。
参考文献
作者
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
jsonlog-4.0.0.tar.gz 的散列
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | d8964ac2f561b821a3ca21cd39849cfbe6da9fd038480e073434f51c65d38971 |
|
| MD5 | e23f4de94f8239d046f7b1c6de58d68e |
|
| BLAKE2b-256 | 1f17da39ca9f04c54fe103f680619dcf626a0be5d0d8083f5f963adfc11e458e |
jsonlog-4.0.0-py3-none-any.whl 的散列
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | ee313731f2a8611a13e0c15cfcfbab75c524f27c8bae24eaeb7ee7a061a60c55 |
|
| MD5 | 0092d5c4c914f1982beb7895cfc14cb3 |
|
| BLAKE2b-256 | 5bf98ff3dc40c5422d69319189bf7bf02e9efdca62284152c75bbb15701f080b |