跳转到主要内容

内置日志模块的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略有不同的参数。这里显示了每个参数的默认值。

filenamefilemodestream参数与logging.basicConfig中的等效参数工作方式相同,因此filenamestream是互斥的。

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 模块。

参考文献

  • 为使用 logging 模块构建。
  • 部分基于 colorlog
  • jq 一起表现卓越!

作者

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

jsonlog-4.0.0.tar.gz (9.5 kB 查看散列)

上传时间

构建分布

jsonlog-4.0.0-py3-none-any.whl (9.8 kB 查看散列)

上传时间 Python 3

支持者