内置日志模块的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 |