42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
import logging
|
|
import os
|
|
from logging.handlers import RotatingFileHandler
|
|
from typing import Optional
|
|
|
|
|
|
def configure_logging(log_level: Optional[str], log_file: Optional[str]) -> None:
|
|
level_name = (log_level or "INFO").upper()
|
|
level = getattr(logging, level_name, logging.INFO)
|
|
|
|
handlers: list[logging.Handler] = []
|
|
stream_handler = logging.StreamHandler()
|
|
handlers.append(stream_handler)
|
|
|
|
if log_file:
|
|
log_path = log_file
|
|
if not os.path.isabs(log_path):
|
|
log_path = os.path.join(os.getcwd(), log_path)
|
|
os.makedirs(os.path.dirname(log_path), exist_ok=True)
|
|
file_handler = RotatingFileHandler(
|
|
log_path, maxBytes=2_000_000, backupCount=3, encoding="utf-8"
|
|
)
|
|
handlers.append(file_handler)
|
|
|
|
formatter = logging.Formatter(
|
|
fmt="%(asctime)s | %(levelname)s | %(name)s | %(message)s",
|
|
datefmt="%Y-%m-%d %H:%M:%S",
|
|
)
|
|
for handler in handlers:
|
|
handler.setFormatter(formatter)
|
|
|
|
root = logging.getLogger()
|
|
for handler in list(root.handlers):
|
|
root.removeHandler(handler)
|
|
for handler in handlers:
|
|
root.addHandler(handler)
|
|
root.setLevel(level)
|
|
|
|
logging.getLogger("uvicorn").setLevel(level)
|
|
logging.getLogger("uvicorn.error").setLevel(level)
|
|
logging.getLogger("uvicorn.access").setLevel(level)
|