feat: log

This commit is contained in:
superobk
2024-04-30 17:59:37 +08:00
parent 884a835cae
commit 54ddb8ee4a
9 changed files with 81 additions and 31 deletions

25
main.py
View File

@ -1,4 +1,27 @@
import uvicorn import uvicorn
import logging
from injector import Injector,inject
from src.log.handler import LogHandler
from src.configuration import EnvConf, LogConf, singleton
@singleton
class Main():
env_conf: EnvConf
@inject
def __init__(self, log_config: LogConf, env_conf: EnvConf, log_handler: LogHandler) -> None:
self.env_conf=env_conf
logging.basicConfig(
handlers=[log_handler],
level=log_config.level,
datefmt=log_config.time_format,
format='%(asctime)s %(message)s')
def run(self):
logger = logging.getLogger(__name__)
logger.info("jarvis-models start", "version", "0.0.1")
uvicorn.run("server:app", host="0.0.0.0", port=8000, log_level="info")
if __name__ == "__main__": if __name__ == "__main__":
uvicorn.run("router:app", host="0.0.0.0", port=8000, log_level="info") injector = Injector()
main = injector.get(Main)
main.run()

View File

@ -25,7 +25,7 @@ async def blackbox(blackbox_name: Union[str, None] = None, request: Request = No
if not blackbox_name: if not blackbox_name:
return await JSONResponse(content={"error": "blackbox_name is required"}, status_code=status.HTTP_400_BAD_REQUEST) return await JSONResponse(content={"error": "blackbox_name is required"}, status_code=status.HTTP_400_BAD_REQUEST)
try: try:
box = blackbox_factory.call_blackbox(blackbox_name) box = blackbox_factory.get_blackbox(blackbox_name)
except ValueError: except ValueError:
return await JSONResponse(content={"error": "value error"}, status_code=status.HTTP_400_BAD_REQUEST) return await JSONResponse(content={"error": "value error"}, status_code=status.HTTP_400_BAD_REQUEST)
return await box.fast_api_handler(request) return await box.fast_api_handler(request)

View File

@ -4,8 +4,6 @@ from typing import Any, Coroutine
from fastapi import Request, Response, status from fastapi import Request, Response, status
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
from ..log.log import Logger
from ..asr.rapid_paraformer.utils import read_yaml from ..asr.rapid_paraformer.utils import read_yaml
from ..asr.rapid_paraformer import RapidParaformer from ..asr.rapid_paraformer import RapidParaformer
from .blackbox import Blackbox from .blackbox import Blackbox
@ -15,8 +13,7 @@ from injector import singleton, inject
class ASR(Blackbox): class ASR(Blackbox):
@inject @inject
def __init__(self,logger: Logger,path = ".env.yaml") -> None: def __init__(self,path = ".env.yaml") -> None:
logger.info("ASR init")
config = read_yaml(path) config = read_yaml(path)
self.paraformer = RapidParaformer(config) self.paraformer = RapidParaformer(config)
@ -38,6 +35,7 @@ class ASR(Blackbox):
async def fast_api_handler(self, request: Request) -> Response: async def fast_api_handler(self, request: Request) -> Response:
data = (await request.form()).get("audio") data = (await request.form()).get("audio")
if data is None: if data is None:
self.logger.warn("asr bag request","type", "fast_api_handler", "api", "asr")
return JSONResponse(content={"error": "data is required"}, status_code=status.HTTP_400_BAD_REQUEST) return JSONResponse(content={"error": "data is required"}, status_code=status.HTTP_400_BAD_REQUEST)
d = await data.read() d = await data.read()
try: try:

View File

@ -1,3 +1,4 @@
import logging
from fastapi import Request, Response,status from fastapi import Request, Response,status
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
from injector import inject, singleton from injector import inject, singleton
@ -8,11 +9,14 @@ from .tts import TTS
from .blackbox import Blackbox from .blackbox import Blackbox
logger = logging.getLogger(__name__)
@singleton @singleton
class AudioChat(Blackbox): class AudioChat(Blackbox):
@inject @inject
def __init__(self, asr: ASR, gpt: Tesou, tts: TTS): def __init__(self, asr: ASR, gpt: Tesou, tts: TTS):
logger.info("audio chat initint")
self.asr = asr self.asr = asr
self.gpt = gpt self.gpt = gpt
self.tts = tts self.tts = tts

View File

@ -59,7 +59,7 @@ class BlackboxFactory:
def __call__(self, *args, **kwargs): def __call__(self, *args, **kwargs):
return self.processing(*args, **kwargs) return self.processing(*args, **kwargs)
def call_blackbox(self, blackbox_name: str) -> Blackbox: def get_blackbox(self, blackbox_name: str) -> Blackbox:
model = self.models.get(blackbox_name) model = self.models.get(blackbox_name)
if model is None: if model is None:
raise ValueError("Invalid Blackbox Type...") raise ValueError("Invalid Blackbox Type...")

View File

@ -1,9 +1,10 @@
from dataclasses import dataclass from injector import inject,singleton
from injector import Injector, inject
import yaml import yaml
import sys import sys
import logging
@singleton
class Configuration(): class Configuration():
@inject @inject
@ -26,7 +27,7 @@ class Configuration():
bbb: bbb:
ccc: "hello world" ccc: "hello world"
""" """
def get(self, path: str | list[str], cfg: dict = None): def get(self, path: str | list[str], cfg: dict = None, default = None):
if isinstance(path, str): if isinstance(path, str):
if cfg is None: if cfg is None:
cfg = self.cfg cfg = self.cfg
@ -36,9 +37,8 @@ class Configuration():
return None return None
if length == 1: if length == 1:
return cfg.get(path[0]) return cfg.get(path[0])
return self.get(path[1:], cfg.get(path[0])) return self.get(path[1:], cfg.get(path[0]), default=default)
class TesouConf(): class TesouConf():
url: str url: str
@ -54,9 +54,37 @@ class MeloConf():
def __init__(self, config: Configuration) -> None: def __init__(self, config: Configuration) -> None:
self.melotts = config.get("melotts.url") self.melotts = config.get("melotts.url")
# 'CRITICAL': CRITICAL,
# 'FATAL': FATAL,
# 'ERROR': ERROR,
# 'WARN': WARNING,
# 'WARNING': WARNING,
# 'INFO': INFO,
# 'DEBUG': DEBUG,
# 'NOTSET': NOTSET,
DEFAULT_LEVEL="WARNING"
DEFAULT_TIME_FORMAT="%Y-%m-%d %H:%M:%S"
@singleton
class LogConf(): class LogConf():
level: str level: int
time_format = "%Y-%m-%d %H:%M:%S"
@inject @inject
def __init__(self,config: Configuration) -> None: def __init__(self,config: Configuration) -> None:
self.level = config.get("log.level") self.level = config.get("log.level")
c = config.get("log.level", default=DEFAULT_LEVEL).upper()
level=logging._nameToLevel.get(c)
if level is None:
self.level = logging.WARNING
else:
self.level = level
self.time_format=config.get("log.time_format", default=DEFAULT_TIME_FORMAT)
@singleton
class EnvConf():
version: str
@inject
def __init__(self, config: Configuration) -> None:
self.version = config.get("env.version")

13
src/log/handler.py Normal file
View File

@ -0,0 +1,13 @@
import logging
class LogHandler(logging.Handler):
def __init__(self)-> None:
logging.Handler.__init__(self=self)
def emit(self, record) -> None:
print("emit", record)
def handle(self, record) -> None:
print("@ handle",record)

View File

@ -1,15 +0,0 @@
import logging
from injector import singleton, inject
from ..configuration import LogConf
@singleton
class Logger(logging.Logger):
@inject
def __init__(self, config: LogConf) -> None:
super().__init__(__name__)
self.setLevel(config.level)
self.addHandler(logging.StreamHandler())
self.addHandler(logging.FileHandler('log.log'))

View File

@ -16,7 +16,6 @@ from src.tts.vits.text.symbols import symbols
from src.tts.vits.text import text_to_sequence from src.tts.vits.text import text_to_sequence
import logging import logging
logging.getLogger().setLevel(logging.INFO)
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
dirbaspath = __file__.split("\\")[1:-1] dirbaspath = __file__.split("\\")[1:-1]