跳转到主要内容

简单库,用于将JSON格式日志输出到stdout

项目描述

https://img.shields.io/pypi/v/sanic-json-logging.svg https://travis-ci.cn/terrycain/sanic-json-logging.svg?branch=master Code coverage Updates

前几天我在亚马逊的ECS上运行了一些容器并将日志记录到cloudwatch。然后我了解到cloudwatch可以解析JSON日志,所以我当然想让Sanic也输出JSON格式的日志。

理想情况下,这个库对大家都有用,如果不是这样,请提出问题,我们会努力改进它 :)

安装

pip install sanic-json-logging

请参阅examples/simple.py以获取完整的工作示例,但以下命令将让您开始使用

import sanic
from sanic_json_logging import setup_json_logging

app = sanic.Sanic(name="somename")
setup_json_logging(app)

setup_json_logging执行以下操作:

  • 更改默认日志格式为JSON格式

  • 同时过滤掉无Keepalive警告

  • 除非特别说明,否则将更改asyncio任务工厂,以实现一些基本的任务本地存储。

  • 安装请求前和请求后的中间件。请求前中间件用于计时任务并生成一个uuid4请求ID。请求后中间件用于输出访问日志。

  • 如果存在,将使用AWS X-Forwarded-For IP在访问日志中

如果 setup_json_logging 改变了任务工厂,则从请求任务创建的所有任务都将包含请求 ID。您可以将 disable_json_access_log=True 传递给设置函数,这将禁用 JSON 访问日志的配置。将 configure_task_local_storage 设置为 false 将禁用在任务对象内部存储请求 ID,这将

目前我将其输出为访问日志,如下所示

{
  "timestamp": "2018-06-09T17:42:52.195701Z",
  "level": "INFO",
  "method": "GET",
  "path": "/endpoint1",
  "remote": "127.0.0.1:33468",
  "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
  "host": "localhost:8000",
  "response_time": 0.0,
  "req_id": "795617c7-b514-4ed9-bb63-cc4fcd883c3d",
  "logger": "sanic.access",
  "status_code": 200,
  "length": 0,
  "type": "access"
}

如果您在请求内的根记录器中记录,它将看起来像这样。

{
  "timestamp": "2018-06-09T17:42:52.195326Z",
  "level": "INFO",
  "message": "some informational message",
  "type": "log",
  "logger": "root",
  "filename": "simple.py",
  "lineno": 16,
  "req_id": "795617c7-b514-4ed9-bb63-cc4fcd883c3d"
}

默认情况下,此包将异常(带跟踪信息)记录为字符串,您可能还想将跟踪信息渲染为 JSON。要实现此目的,只需提供替代格式化程序。首先使用此包及其可选依赖项安装此包

pip install sanic-json-logging[extratb]

然后注入另一个格式化程序

from sanic_json_logging import LOGGING_CONFIG_DEFAULTS as cfg

cfg["formatters"]["generic"]["class"] = "sanic_json_logging.formatters.JSONTracebackJSONFormatter"
setup_json_logging(app, disable_json_access_log=True, config=cfg)

在您的所有跟踪信息都正确格式化为 JSON 之后

{
  "timestamp": "2021-08-26T23:19:49.412293Z",
  "level": "ERROR",
  "message": "Exception occurred while handling uri: 'http://127.0.0.1:8000/'",
  "type": "exception",
  "logger": "sanic.error",
  "worker": 31915,
  "filename": "handlers.py",
  "lineno": 146,
  "traceback": {
    "exc_type": "Exception",
    "exc_msg": "foo",
    "exc_tb": {
      "frames": [
        {
          "func_name": "handle_request",
          "lineno": 770,
          "module_name": "sanic.app",
          "module_path": "/python3.9/site-packages/sanic/app.py",
          "lasti": 182,
          "line": "                    response = await response"
        },
        {
          "func_name": "root",
          "lineno": 20,
          "module_name": "api.general",
          "module_path": "/api/general.py",
          "lasti": 6,
          "line": "    raise Exception(\"foo\")"
        }
      ]
    }
  },
  "req_id": "f128370f-b949-44e7-bb94-4635bbcad486"
}

变更日志

4.1.2

  • @digitalkaoz 使用跟踪信息格式化程序修复了更多错误

4.1.1

  • 更新测试以使用替代跟踪信息格式化程序

4.1.0

  • 添加了设置自定义格式化程序的功能

  • 添加了可选的详细跟踪信息格式化程序

4.0.1

  • 正确禁用访问日志

4.0.0

  • 添加了 flake8、black、isort、mypy

  • 放弃 Travis,转而使用 Github Actions

  • 从 setup.py 切换到使用 Poetry

  • 更新测试以使用 sanic-testing

3.2.0

  • 更新以使用新的 request.ctx 上下文字典

  • 添加了对 Python 3.7 asyncio 变更的支持

3.1.0

  • 如果 LogRecord 消息不是 JSON 可序列化的,则将其转换为字符串

3.0.0

  • 添加了禁用任务本地存储的选项

2.0.0

  • 删除了 NoAccessLogSanic 子类,以设置参数代替

1.3.0

  • 将请求 ID 添加到 request 字典中

  • 修复了迁移到 travis.com

1.2.0

  • 修复了 UA 标头错误,修复了测试

1.1.1

  • 基本上是第一个不错的版本

项目详情


下载文件

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

源分发

sanic-json-logging-4.1.2.tar.gz (12.2 kB 查看哈希)

上传时间

构建分发

sanic_json_logging-4.1.2-py3-none-any.whl (11.5 kB 查看哈希)

上传时间 Python 3

支持