From 5a1cb8a133b032f59ef695ef02587a66e41a6108 Mon Sep 17 00:00:00 2001 From: SantaSpeen Date: Thu, 13 Jul 2023 00:23:57 +0300 Subject: [PATCH] Handle web logs --- src/core/utils.py | 7 ++++-- src/modules/WebAPISystem/app.py | 25 ------------------ src/modules/WebAPISystem/utils.py | 42 ++++++++++++++++++++++++++++--- 3 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/core/utils.py b/src/core/utils.py index 40b00c5..a154ba6 100644 --- a/src/core/utils.py +++ b/src/core/utils.py @@ -28,8 +28,11 @@ if os.path.exists(log_file): break index += 1 with tarfile.open(gz_path % index, "w:gz") as tar: - tar.add(log_file, os.path.basename(log_file)) - os.remove(log_file) + logs_files = [log_file, "./logs/web.log", "./logs/web_access.log"] + for file in logs_files: + if os.path.exists(file): + tar.add(file, os.path.basename(file)) + os.remove(file) fh = logging.FileHandler(log_file, encoding='utf-8') fh.setFormatter(logging.Formatter(log_format)) diff --git a/src/modules/WebAPISystem/app.py b/src/modules/WebAPISystem/app.py index 554b7ef..35a6af2 100644 --- a/src/modules/WebAPISystem/app.py +++ b/src/modules/WebAPISystem/app.py @@ -7,7 +7,6 @@ from fastapi.exceptions import RequestValidationError from starlette import status from starlette.exceptions import HTTPException as StarletteHTTPException from starlette.responses import JSONResponse -from uvicorn.config import LOGGING_CONFIG import core.utils from . import utils @@ -21,30 +20,6 @@ uvserver = None data_pool = [] data_run = [True] -LOGGING_CONFIG["formatters"]["default"]['fmt'] = core.utils.log_format -LOGGING_CONFIG["formatters"]["access"]["fmt"] = core.utils.log_format_access -LOGGING_CONFIG["formatters"].update({ - "file_default": { - "fmt": core.utils.log_format - }, - "file_access": { - "fmt": core.utils.log_format_access - } -}) -LOGGING_CONFIG["handlers"]["default"]['stream'] = "ext://sys.stdout" -LOGGING_CONFIG["handlers"].update({ - "file_default": { - "class": "logging.handlers.RotatingFileHandler", - "filename": "webserver.log" - }, - "file_access": { - "class": "logging.handlers.RotatingFileHandler", - "filename": "webserver.log" - } -}) -LOGGING_CONFIG["loggers"]["uvicorn"]["handlers"].append("file_default") -LOGGING_CONFIG["loggers"]["uvicorn.access"]["handlers"].append("file_access") - def response(data=None, code=status.HTTP_200_OK, error_code=0, error_message=None): if 200 >= code <= 300: diff --git a/src/modules/WebAPISystem/utils.py b/src/modules/WebAPISystem/utils.py index ca6fda9..beda7e4 100644 --- a/src/modules/WebAPISystem/utils.py +++ b/src/modules/WebAPISystem/utils.py @@ -2,10 +2,17 @@ import asyncio import sys import click -from uvicorn.server import Server, logger +import uvicorn.server as uvs +from uvicorn.config import LOGGING_CONFIG from uvicorn.lifespan import on +import core.utils + +# logger = core.utils.get_logger("uvicorn") +# uvs.logger = logger +logger = uvs.logger + def ev_log_started_message(self, listeners) -> None: cfg = self.config @@ -42,7 +49,7 @@ async def ev_shutdown(self, sockets=None) -> None: try: await asyncio.wait_for(self._wait_tasks_to_complete(), timeout=self.config.timeout_graceful_shutdown) except asyncio.TimeoutError: - logger.error("Cancel %s running task(s), timeout graceful shutdown exceeded",len(self.server_state.tasks)) + logger.error("Cancel %s running task(s), timeout graceful shutdown exceeded", len(self.server_state.tasks)) for t in self.server_state.tasks: if sys.version_info < (3, 9): t.cancel() @@ -81,7 +88,34 @@ async def on_shutdown(self) -> None: def hack_fastapi(): - Server.shutdown = ev_shutdown - Server._log_started_message = ev_log_started_message + uvs.Server.shutdown = ev_shutdown + uvs.Server._log_started_message = ev_log_started_message on.LifespanOn.startup = on_startup on.LifespanOn.shutdown = on_shutdown + + LOGGING_CONFIG["formatters"]["default"]['fmt'] = core.utils.log_format + LOGGING_CONFIG["formatters"]["access"]["fmt"] = core.utils.log_format_access + LOGGING_CONFIG["formatters"].update({ + "file_default": { + "fmt": core.utils.log_format + }, + "file_access": { + "fmt": core.utils.log_format_access + } + }) + LOGGING_CONFIG["handlers"]["default"]['stream'] = "ext://sys.stdout" + LOGGING_CONFIG["handlers"].update({ + "file_default": { + "class": "logging.handlers.RotatingFileHandler", + "filename": "./logs/web.log", + "encoding": "utf-8", + }, + "file_access": { + "class": "logging.handlers.RotatingFileHandler", + "filename": "./logs/web_access.log", + } + }) + LOGGING_CONFIG["loggers"]["uvicorn"]["handlers"].append("file_default") + LOGGING_CONFIG["loggers"]["uvicorn.access"]["handlers"].append("file_access") + +