From 8ffa1c9d4db3a1918f7b3bedd17b061bdbee93dd Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Mon, 24 Apr 2023 13:54:10 +0800 Subject: [PATCH] Fix logger --- src/main.py | 37 ++++++++++++++++++++++------------- src/module/api.py | 41 +++++++++++---------------------------- src/module/app.py | 16 ++++++++++++--- src/module/conf/config.py | 3 ++- 4 files changed, 50 insertions(+), 47 deletions(-) diff --git a/src/main.py b/src/main.py index e2bc8cb9..b5e1971f 100644 --- a/src/main.py +++ b/src/main.py @@ -1,12 +1,17 @@ import os import signal import logging -import multiprocessing import uvicorn +import multiprocessing + +from fastapi import Request +from fastapi.responses import HTMLResponse, RedirectResponse +from fastapi.staticfiles import StaticFiles +from fastapi.templating import Jinja2Templates from module import app from module.api import router -from module.conf import VERSION, setup_logger, settings +from module.conf import VERSION, settings logger = logging.getLogger(__name__) @@ -14,7 +19,7 @@ logger = logging.getLogger(__name__) main_process = multiprocessing.Process(target=app.run) -@router.get("/api/v1/restart") +@router.get("/api/v1/restart", tags=["program"]) async def restart(): global main_process logger.info("Restarting...") @@ -25,18 +30,24 @@ async def restart(): return {"status": "success"} -def show_info(): - with open("icon", "r") as f: - for line in f.readlines(): - logger.info(line.strip("\n")) - logger.info(f"Version {VERSION} Author: EstrellaXD Twitter: https://twitter.com/Estrella_Pan") - logger.info("GitHub: https://github.com/EstrellaXD/Auto_Bangumi/") - logger.info("Starting AutoBangumi...") +if VERSION != "DEV_VERSION": + router.mount("/assets", StaticFiles(directory="templates/assets"), name="assets") + templates = Jinja2Templates(directory="templates") + + # HTML Response + @router.get("/{full_path:path}", response_class=HTMLResponse, tags=["html"]) + def index(request: Request): + context = {"request": request} + return templates.TemplateResponse("index.html", context) +else: + @router.get("/", status_code=302, tags=["html"]) + def index(): + return RedirectResponse("/docs") if __name__ == "__main__": - setup_logger() - show_info() + log_config = uvicorn.config.LOGGING_CONFIG + log_config["formatters"]["default"]["fmt"] = "[%(asctime)s] %(levelname)-8s %(message)s" main_process.start() - uvicorn.run(router, host="0.0.0.0", port=settings.program.webui_port) + uvicorn.run(router, host="0.0.0.0", port=settings.program.webui_port, log_config=log_config) diff --git a/src/module/api.py b/src/module/api.py index 6556c339..8cae4b31 100644 --- a/src/module/api.py +++ b/src/module/api.py @@ -1,30 +1,29 @@ -import uvicorn -from uvicorn.config import LOGGING_CONFIG -from fastapi import FastAPI, Request -from fastapi.responses import HTMLResponse, FileResponse, RedirectResponse -from fastapi.templating import Jinja2Templates -from fastapi.staticfiles import StaticFiles import logging +from fastapi import FastAPI +from fastapi.responses import FileResponse from module.core import APIProcess -from module.conf import settings, DATA_PATH, LOG_PATH, VERSION +from module.conf import DATA_PATH, LOG_PATH, settings from module.utils import json_config from module.models.api import * from module.models import Config -logger = logging.getLogger(__name__) router = FastAPI() api_func = APIProcess() -if VERSION != "DEV_VERSION": - router.mount("/assets", StaticFiles(directory="templates/assets"), name="assets") - templates = Jinja2Templates(directory="templates") +@router.on_event("startup") +async def startup_event(): + logger = logging.getLogger("uvicorn.access") + handler = logging.StreamHandler() + handler.setLevel(logging.INFO) + handler.setFormatter(logging.Formatter("[%(asctime)s] %(levelname)-8s %(message)s")) + logger.addHandler(handler) @router.get("/api/v1/data") -def get_data(): +async def get_data(): data = json_config.load(DATA_PATH) return data @@ -63,21 +62,3 @@ async def add_rule(info: AddRule): async def update_config(config: Config): return api_func.update_config(config) -if VERSION != "DEV_VERSION": -# HTML Response - @router.get("/{full_path:path}", response_class=HTMLResponse) - def index(request: Request): - context = {"request": request} - return templates.TemplateResponse("index.html", context) -else: - @router.get("/", status_code=302) - def index(): - return RedirectResponse("/docs") - - -def run(): - LOGGING_CONFIG["formatters"]["default"]["fmt"] = "[%(asctime)s] %(levelprefix)s %(message)s" - uvicorn.run(router, host="0.0.0.0", port=settings.program.webui_port) - - - diff --git a/src/module/app.py b/src/module/app.py index 668f2f18..aced1330 100644 --- a/src/module/app.py +++ b/src/module/app.py @@ -2,7 +2,7 @@ import os import time import logging -from module.conf import settings, setup_logger, LOG_PATH, DATA_PATH, RSS_LINK +from module.conf import settings, setup_logger, LOG_PATH, DATA_PATH, RSS_LINK, VERSION from module.utils import json_config from module.core import DownloadClient @@ -61,11 +61,21 @@ def main_process(bangumi_data, download_client: DownloadClient): time.sleep(settings.program.sleep_time / settings.program.rename_times) +def show_info(): + with open("icon", "r") as f: + for line in f.readlines(): + logger.info(line.strip("\n")) + logger.info(f"Version {VERSION} Author: EstrellaXD Twitter: https://twitter.com/Estrella_Pan") + logger.info("GitHub: https://github.com/EstrellaXD/Auto_Bangumi/") + logger.info("Starting AutoBangumi...") + + def run(): - setup_logger() # 初始化 - reset_log() settings.reload() + reset_log() + setup_logger() + show_info() download_client = DownloadClient() download_client.init_downloader() if settings.rss_parser.token is None: diff --git a/src/module/conf/config.py b/src/module/conf/config.py index a1b6cfb7..ec513609 100644 --- a/src/module/conf/config.py +++ b/src/module/conf/config.py @@ -21,8 +21,9 @@ class Setting(Config): def save_config_to_file(config: Config, path: str): + config_dict = config.dict() with open(path, "w", encoding="utf-8") as f: - json.dump(config, f, indent=4) + json.dump(config_dict, f, indent=4) logger.info(f"Config saved")