微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Starlette - uvicorn - 石墨烯异常记录

如何解决Starlette - uvicorn - 石墨烯异常记录

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

我想查看带有 traceroute 的异常日志。

但目前它隐藏了异常,我只看到带有“错误请求”消息的访问日志。

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

如我所愿,根记录器已转为正确记录消息,但似乎应用程序处理程序中的异常已被处理而未传播到根记录器。

我还设置了 sys.excepthook 如下:

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 配置文件

{
  "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","stream": "ext://sys.stdout"
    }
  },"loggers": {
    "uvicorn": {
      "level": "INFO"
    },"uvicorn.exception": {
      "level": "INFO"
    },"uvicorn.error": {
      "level": "INFO"
    },"uvicorn.access": {
      "handlers": [
        "access"
      ],"level": "INFO","propagate": false
    }
  }
}

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

解决方法

它是特定于 graphql-python 库的。

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

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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?