python日志模块的json日志格式。
jsonlog的Python项目详细描述
jsonlog
Python的logging
模块的一个插入式格式化程序,它将消息输出为行
分隔的JSON
而jsonlog
提供了它自己的basicConfig
方法,因此您可以开始
很快,它的所有特性和类都可以与logging
模块一起使用。
用法
您可以使用jsonlog
替换logging
:
importjsonlogjsonlog.warning("Hello world.")
{"timestamp":"2019-06-21T19:06:25.285730","level":"WARNING","name":"root","message":"Hello world."}
它是作为日志格式化程序实现的,因此可以像您一样使用logging
通常会。
importjsonlogimportloggingjsonlog.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
中的等价物
独一无二
importjsonlogjsonlog.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的处理程序。
importlogging.configlogging.config.dictConfig({"version":1,"formatters":{"json":{"()":"jsonlog.JSONFormatter"}},"handlers":{"stream":{"class":"logging.StreamHandler","formatter":"json"}},"loggers":{"":{"handlers":["stream"]}},})
向json输出添加额外属性
与extra=
一起提供的记录属性将包含在json对象中。
importjsonlogimportloggingjsonlog.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}
如果映射作为唯一的位置参数传递,则 地图也将包括在内。
importjsonlogimportloggingjsonlog.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及更高版本编写的兼容性补丁将是
Python3.5及更高版本接受,但Python2的修补程序将被拒绝。