如何解决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)
我为线程设置了异常钩子。通常查看所有日志消息就足够了。
{
"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 举报,一经查实,本站将立刻删除。