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。这里显示的是每个参数的默认值。

filenamefilemodestream参数的工作方式与它们的相同 logging.basicConfig中的等价物,以及filenamestream中的等价物 独一无二

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的修补程序将被拒绝。

参考文献

作者

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android HttpClient cookies   如何使用Java在远程系统上运行SSH命令?   java从字符串数组中的字符串末尾删除“,”   在One plus 3t手机上,当应用程序被终止或从最近的应用程序中刷出时,java Android FCM推送通知不起作用   java如何使垂直滚动条始终位于jtable的末尾   在java中解析迄今为止“未知”的字符串   javascript在Java中获取Nashorn JsonObject   java windows 10和ubuntu可以使用相同的JDK吗?   java在不同的文件中记录不同的日志。但所有日志都放在同一个文件中   具有特定jdk的java Gradle构建项目   xml Java web服务生成错误响应   javascript Jaggery文件更改不显示   java输出二进制搜索树数组   将BufferedReader解析为JSON对象时,java在位置处意外标记文件结尾