Fix logging and use coloredlogs for nicer output

This commit is contained in:
Paul Bienkowski 2022-02-18 11:12:42 +01:00
parent 96642d2255
commit 0d49945018
7 changed files with 48 additions and 6 deletions

View file

@ -1,6 +1,7 @@
HOST = "0.0.0.0" HOST = "0.0.0.0"
PORT = 3000 PORT = 3000
DEBUG = True DEBUG = True
VERBOSE = False
AUTO_RESTART = True AUTO_RESTART = True
SECRET = "!!!!!!!!!!!!CHANGE ME!!!!!!!!!!!!" SECRET = "!!!!!!!!!!!!CHANGE ME!!!!!!!!!!!!"
POSTGRES_URL = "postgresql+asyncpg://obs:obs@postgres/obs" POSTGRES_URL = "postgresql+asyncpg://obs:obs@postgres/obs"

View file

@ -4,6 +4,7 @@ PORT = 3000
# Extended log output, but slower # Extended log output, but slower
DEBUG = False DEBUG = False
VERBOSE = DEBUG
AUTO_RESTART = DEBUG AUTO_RESTART = DEBUG
# Required to encrypt or sign sessions, cookies, tokens, etc. # Required to encrypt or sign sessions, cookies, tokens, etc.

View file

@ -24,7 +24,7 @@ from obs.api.db import User, make_session, connect_db
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
app = Sanic("OpenBikeSensor Portal API") app = Sanic("OpenBikeSensor Portal API", log_config={})
app.update_config("./config.py") app.update_config("./config.py")
c = app.config c = app.config
@ -32,8 +32,8 @@ api = Blueprint("api", url_prefix="/api")
auth = Blueprint("auth", url_prefix="") auth = Blueprint("auth", url_prefix="")
@api.exception(SanicException, BaseException) @app.exception(SanicException, BaseException)
def _handle_sanic_errors(_request, exception): async def _handle_sanic_errors(_request, exception):
log.error("Exception in handler: %s", exception, exc_info=True) log.error("Exception in handler: %s", exception, exc_info=True)
return json_response( return json_response(
{ {

View file

@ -18,6 +18,8 @@ log = logging.getLogger(__name__)
client = Client(client_authn_method=CLIENT_AUTHN_METHOD) client = Client(client_authn_method=CLIENT_AUTHN_METHOD)
# Do not show verbose library output, even when the appliaction is in debug mode
logging.getLogger('oic').setLevel(logging.INFO)
@auth.before_server_start @auth.before_server_start
async def connect_auth_client(app, loop): async def connect_auth_client(app, loop):

View file

@ -1,28 +1,64 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import math
import sys import sys
import os import os
import argparse import argparse
import asyncio import asyncio
import logging import logging
import coloredlogs
from obs.api.app import app from obs.api.app import app
from obs.api.db import connect_db from obs.api.db import connect_db
log = logging.getLogger(__name__)
def format_size(n, b=1024):
if n == 0:
return "0 B"
if n < 0:
return "-" + format_size(n, b)
e = math.floor(math.log(n, b))
prefixes = ["", "Ki", "Mi", "Gi", "Ti"] if b == 1024 else ["", "K", "M", "G", "T"]
e = min(e, len(prefixes) - 1)
r = n / b**e
s = f"{r:0.2f}" if e > 0 else str(n)
return f"{s} {prefixes[e]}B"
class AccessLogFilter(logging.Filter):
def filter(self, record):
if not record.msg:
record.msg = (
f"{record.request} - {record.status} ({format_size(record.byte)})"
)
return True
def main(): def main():
debug = app.config.DEBUG debug = app.config.DEBUG
logging.basicConfig( coloredlogs.install(
level=logging.DEBUG if debug else logging.INFO, level=logging.DEBUG if app.config.get("VERBOSE", debug) else logging.INFO,
format="%(levelname)s: %(message)s", milliseconds=True,
isatty=True,
) )
for ln in ["sanic.root", "sanic.error", "sanic.access"]:
l = logging.getLogger(ln)
for h in list(l.handlers):
l.removeHandler(h)
logging.getLogger("sanic.access").addFilter(AccessLogFilter())
app.run( app.run(
host=app.config.HOST, host=app.config.HOST,
port=app.config.PORT, port=app.config.PORT,
debug=debug, debug=debug,
auto_reload=app.config.get("AUTO_RELOAD", debug), auto_reload=app.config.get("AUTO_RELOAD", debug),
# access_log=False,
) )

View file

@ -1,3 +1,4 @@
coloredlogs~=15.0.1
sanic~=21.9.3 sanic~=21.9.3
oic~=1.3.0 oic~=1.3.0
sanic-session~=0.8.0 sanic-session~=0.8.0

View file

@ -10,6 +10,7 @@ setup(
packages=find_packages(), packages=find_packages(),
package_data={}, package_data={},
install_requires=[ install_requires=[
"coloredlogs~=15.0.1",
"sanic~=21.9.3", "sanic~=21.9.3",
"oic>=1.3.0, <2", "oic>=1.3.0, <2",
"sanic-session~=0.8.0", "sanic-session~=0.8.0",