python fastapi + uvicorn 记录日志的最佳实践,结合nb_log
python fastapi + uvicorn 记录日志的最佳实践,结合nb_log
python fastapi + uvicorn 记录日志的最佳实践
,要记录对fastapi
什么时候请求了什么url
和入参,只需要记录uvicorn命名空间
的日志就可以了。
文章使用nb_log 五彩日
志来记录web后台
的控制台日志 + 多进程安全切割的文件日志。
为什么不能nb_log.get_logger
提前设置好相关命名空间的日志formatter
和handlers
呢?因为他是在函数内部里面运行的
D:\ProgramData\Miniconda3\Lib\site-packages\uvicorn\config.py 函数内部中logging.config.dictConfig
配置的,所以需要传递log_config
fastapiweb222.py 文件
内容。
from pathlib import Path
from fastapi import FastAPI
import nb_log
app = FastAPI()
@app.get("/")
async def hello_world():
return "Hello, World!"
LOG_FILE_PATH = '/pythonlogs'
LOGGING_CONFIG: dict = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"default": {
"()": "uvicorn.logging.DefaultFormatter",
"fmt": "%(asctime)s %(levelprefix)s %(message)s", # 这里日志格式加了时间显示
"use_colors": False,
},
"access": {
"()": "uvicorn.logging.AccessFormatter",
"fmt": '%(name)s %(asctime)s %(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s',
# 这里日志格式加了时间显示
},
},
"handlers": {
"default": {
"formatter": "default",
"class": "logging.StreamHandler",
"stream": "ext://sys.stderr",
},
# "default_file": {
# "formatter": "default",
# "class": "nb_log.handlers.ConcurrentRotatingFileHandler", # 注意这里是多进程安全切割日志
# 'filename': Path(LOG_FILE_PATH) / 'uvicorn_default.log',
# 'maxBytes': 1000 * 1000 * 100,
# 'backupCount': 3,
# },
"default_file": {
"formatter": "default",
"class": "nb_log.handlers.BothDayAndSizeRotatingFileHandler", # 注意这里是多进程安全切割日志
'file_name': 'uvicorn_default.log',
'log_path': LOG_FILE_PATH,
'max_bytes': 1000 * 1000 * 1000,
'back_count': 10,
},
"access": {
"formatter": "access",
"class": "nb_log.handlers.ColorHandler", # 这里用了nb_log的彩色控制台handler。
},
# "access_file": {
# "formatter": "access",
# "class": "nb_log.handlers.ConcurrentRotatingFileHandler", # 注意这里是多进程安全切割日志
# 'filename': Path(LOG_FILE_PATH) / 'uvicorn_access.log',
# 'maxBytes': 1000 * 1000 * 100,
# 'backupCount': 3,
# },
"access_file": {
"formatter": "access",
"class": "nb_log.handlers.BothDayAndSizeRotatingFileHandler", # 注意这里是多进程安全切割日志
'file_name': 'uvicorn_access.log',
'log_path': LOG_FILE_PATH,
'max_bytes': 1000 * 1000 * 1000,
'back_count': 10,
},
},
"loggers": {
"uvicorn": {"handlers": ["default", "default_file"], "level": "INFO"},
"uvicorn.error": {"level": "INFO"},
"uvicorn.access": {"handlers": ["access", "access_file"], "level": "INFO", "propagate": False},
},
}
if __name__ == "__main__":
import uvicorn
uvicorn.run('nb_http_client.tests.fastapi_server:app', host="0.0.0.0", port=8008, workers=2,log_config=LOGGING_CONFIG)
控制台截图:
文件日志截图:
python fastapi + uvicorn 记录日志的最佳实践,结合nb_log
标签:log,python,fastapi,nb,uvicorn,access,default,日志 From: https://blog.csdn.net/weixin_54626591/article/details/139611976