CLI: Added custom logger

This commit is contained in:
Qubasa
2023-09-22 18:34:43 +02:00
committed by Mic92
parent 904301c20e
commit 9dca1a4672
5 changed files with 57 additions and 4 deletions

View File

@@ -0,0 +1,42 @@
import logging
import datetime
class CustomFormatter(logging.Formatter):
grey = "\x1b[38;20m"
yellow = "\x1b[33;20m"
red = "\x1b[31;20m"
bold_red = "\x1b[31;1m"
green = "\u001b[32m"
blue = "\u001b[34m"
def format_str(color):
reset = "\x1b[0m"
return f"%(asctime)s - %(name)s - {color} %(levelname)s {reset} - %(message)s (%(filename)s:%(lineno)d)"
FORMATS = {
logging.DEBUG: format_str(blue),
logging.INFO: format_str(green),
logging.WARNING: format_str(yellow),
logging.ERROR: format_str(red),
logging.CRITICAL: format_str(bold_red)
}
def formatTime(self, record,datefmt=None):
now = datetime.datetime.now()
now = now.strftime("%H:%M:%S")
return now
def format(self, record):
log_fmt = self.FORMATS.get(record.levelno)
formatter = logging.Formatter(log_fmt)
formatter.formatTime = self.formatTime
return formatter.format(record)
def register(level):
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(CustomFormatter())
logging.basicConfig(level=level, handlers=[ch])

View File

@@ -2,7 +2,9 @@ from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from fastapi.routing import APIRoute from fastapi.routing import APIRoute
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
import logging
from .. import custom_logger
from .assets import asset_path from .assets import asset_path
from .routers import flake, health, machines, root, vms from .routers import flake, health, machines, root, vms
@@ -35,4 +37,6 @@ def setup_app() -> FastAPI:
return app return app
custom_logger.register(logging.getLogger('uvicorn').level)
app = setup_app() app = setup_app()

View File

@@ -19,6 +19,10 @@ from ..schemas import (
Status, Status,
) )
# Logging setup
import logging
log = logging.getLogger(__name__)
router = APIRouter() router = APIRouter()

View File

@@ -3,15 +3,16 @@ import json
import shlex import shlex
from typing import Annotated, AsyncIterator from typing import Annotated, AsyncIterator
from fastapi import APIRouter, Body, HTTPException, Request, status
from fastapi import APIRouter, Body, HTTPException, Request, status, logger
from fastapi.encoders import jsonable_encoder from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse, StreamingResponse from fastapi.responses import JSONResponse, StreamingResponse
from ...nix import nix_build, nix_eval from ...nix import nix_build, nix_eval
from ..schemas import VmConfig, VmInspectResponse from ..schemas import VmConfig, VmInspectResponse
router = APIRouter()
router = APIRouter()
class NixBuildException(HTTPException): class NixBuildException(HTTPException):
def __init__(self, msg: str, loc: list = ["body", "flake_attr"]): def __init__(self, msg: str, loc: list = ["body", "flake_attr"]):
@@ -120,8 +121,10 @@ command output:
{stderr} {stderr}
""" """
) )
import logging
@router.post("/api/vms/create") @router.post("/api/vms/create")
async def create_vm(vm: Annotated[VmConfig, Body()]) -> StreamingResponse: async def create_vm(vm: Annotated[VmConfig, Body()]) -> StreamingResponse:
return StreamingResponse(vm_build(vm)) return StreamingResponse(vm_build(vm))

View File

@@ -7,12 +7,11 @@ import webbrowser
from contextlib import ExitStack, contextmanager from contextlib import ExitStack, contextmanager
from pathlib import Path from pathlib import Path
from threading import Thread from threading import Thread
from typing import Iterator from typing import (Iterator, Dict, Any)
# XXX: can we dynamically load this using nix develop? # XXX: can we dynamically load this using nix develop?
from uvicorn import run from uvicorn import run
logger = logging.getLogger(__name__)
def defer_open_browser(base_url: str) -> None: def defer_open_browser(base_url: str) -> None:
@@ -87,5 +86,6 @@ def start_server(args: argparse.Namespace) -> None:
port=args.port, port=args.port,
log_level=args.log_level, log_level=args.log_level,
reload=args.reload, reload=args.reload,
access_log=args.log_level == "debug",
headers=headers, headers=headers,
) )