Uvicorn loguru format (#741)

* use loguru formatting for uvicorn logs

* remove depth from logging interceptor

* format for uvicorn

* black

* isort

* black again

* python3-dev

* python3-dev

* leaner pipeline

Co-authored-by: dni <dni.khr@gmail.com>
This commit is contained in:
calle 2022-07-15 19:54:12 +02:00 committed by GitHub
parent 348033da1b
commit 6a3a72b944
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 9 deletions

View file

@ -1,7 +1,7 @@
HOST=127.0.0.1 HOST=127.0.0.1
PORT=5000 PORT=5000
DEBUG=true DEBUG=false
LNBITS_ALLOWED_USERS="" LNBITS_ALLOWED_USERS=""
LNBITS_ADMIN_USERS="" LNBITS_ADMIN_USERS=""

View file

@ -1,11 +1,9 @@
import asyncio import asyncio
import importlib import importlib
import logging
import sys import sys
import traceback import traceback
import warnings import warnings
from loguru import logger
from http import HTTPStatus from http import HTTPStatus
from fastapi import FastAPI, Request from fastapi import FastAPI, Request
@ -14,6 +12,7 @@ from fastapi.middleware.cors import CORSMiddleware
from fastapi.middleware.gzip import GZipMiddleware from fastapi.middleware.gzip import GZipMiddleware
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from loguru import logger
import lnbits.settings import lnbits.settings
from lnbits.core.tasks import register_task_listeners from lnbits.core.tasks import register_task_listeners
@ -199,8 +198,33 @@ def register_exception_handlers(app: FastAPI):
def configure_logger() -> None: def configure_logger() -> None:
logger.remove() logger.remove()
log_level: str = "DEBUG" if lnbits.settings.DEBUG else "INFO" log_level: str = "DEBUG" if lnbits.settings.DEBUG else "INFO"
if lnbits.settings.DEBUG: formatter = Formatter()
fmt: str = "<green>{time:YYYY-MM-DD HH:mm:ss.SS}</green> | <level>{level: <6}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | <level>{message}</level>" logger.add(sys.stderr, level=log_level, format=formatter.format)
else:
fmt: str = "<green>{time:YYYY-MM-DD HH:mm:ss.SS}</green> | <level>{level}</level> | <level>{message}</level>" logging.getLogger("uvicorn").handlers = [InterceptHandler()]
logger.add(sys.stderr, level=log_level, format=fmt) logging.getLogger("uvicorn.access").handlers = [InterceptHandler()]
class Formatter:
def __init__(self):
self.padding = 0
self.minimal_fmt: str = "<green>{time:YYYY-MM-DD HH:mm:ss.SS}</green> | <level>{level}</level> | <level>{message}</level>\n"
if lnbits.settings.DEBUG:
self.fmt: str = "<green>{time:YYYY-MM-DD HH:mm:ss.SS}</green> | <level>{level: <4}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | <level>{message}</level>\n"
else:
self.fmt: str = self.minimal_fmt
def format(self, record):
function = "{function}".format(**record)
if function == "emit": # uvicorn logs
return self.minimal_fmt
return self.fmt
class InterceptHandler(logging.Handler):
def emit(self, record):
try:
level = logger.level(record.levelname).name
except ValueError:
level = record.levelno
logger.log(level, record.getMessage())