首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Starlette - uvicorn - graphene异常日志记录

Starlette - uvicorn - graphene异常日志记录
EN

Stack Overflow用户
提问于 2021-02-20 05:22:15
回答 1查看 273关注 0票数 0

我在uvicorn上使用starlette中的石墨烯应用程序。

我想看看traceroute的异常日志。

但目前它隐藏了异常,我只看到带有"Bad request“消息的访问日志。

我已经将我知道的所有记录器重定向到根记录器,除了访问日志。

正如我所希望的,根记录器被转换为正确地记录消息,但是应用处理程序中的异常似乎是被捕获的,并且不会传播到根记录器。

我还设置了如下的sys.excepthook

代码语言:javascript
复制
def _exception_logging(exctype, value, tb):
    traceback_string = ''.join(traceback.format_tb(tb, 10))
    write_val = \
        f'Traceback (most recent call last):\n{traceback_string}{exctype.__name__}: {value}'
    logging.error(write_val)

我为线程设置了异常钩子。通常,查看所有日志消息就足够了。

我使用下一个json配置文件:

代码语言:javascript
复制
{
  "version": 1,
  "disable_existing_loggers": false,
  "formatters": {
    "default": {
      "()": "uvicorn.logging.DefaultFormatter",
      "fmt": "%(levelprefix)s %(message)s",
      "use_colors": null
    },
    "access": {
      "()": "uvicorn.logging.AccessFormatter",
      "fmt": "[%(asctime)s] [%(process)s] [%(levelname)s]: %(client_addr)s - \"%(request_line)s\" %(status_code)s"
    }
  },
  "handlers": {
    "default": {
      "formatter": "default",
      "class": "logging.StreamHandler",
      "stream": "ext://sys.stderr"
    },
    "access": {
      "formatter": "access",
      "class": "logging.StreamHandler",
      "stream": "ext://sys.stdout"
    }
  },
  "loggers": {
    "uvicorn": {
      "level": "INFO"
    },
    "uvicorn.exception": {
      "level": "INFO"
    },
    "uvicorn.error": {
      "level": "INFO"
    },
    "uvicorn.access": {
      "handlers": [
        "access"
      ],
      "level": "INFO",
      "propagate": false
    }
  }
}

我怀疑日志配置文件中有问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-20 07:25:07

它是特定于graphql-python库的。

graphql.format_error函数应该被覆盖,例如:

代码语言:javascript
复制
import logging
from graphql import format_error as default_format_error

def format_error(error):
    try:
        original_error = error.original_error
        if isinstance(original_error, Exception):
            logging.error('Error in GraphQL view', exc_info=original_error)
    finally:
        return default_format_error(error)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66285159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档