mirror of
https://github.com/Xevion/linkpulse.git
synced 2025-12-09 02:07:42 -06:00
Disable handlers, setup propagation with uvicorn log_config
Apparently this was what I have been chasing for the last few hours.
This commit is contained in:
@@ -2,7 +2,6 @@ import sys
|
||||
import structlog
|
||||
|
||||
|
||||
|
||||
logger = structlog.get_logger()
|
||||
|
||||
|
||||
@@ -17,7 +16,15 @@ def main(*args):
|
||||
run(
|
||||
"linkpulse.app:app",
|
||||
reload=True,
|
||||
host="0.0.0.0"
|
||||
host="0.0.0.0",
|
||||
log_config={
|
||||
"version": 1,
|
||||
"disable_existing_loggers": False,
|
||||
"loggers": {
|
||||
"uvicorn": {"propagate": True},
|
||||
"uvicorn.access": {"propagate": True},
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
elif args[0] == "migrate":
|
||||
|
||||
@@ -24,7 +24,6 @@ from psycopg2.extras import execute_values
|
||||
|
||||
from linkpulse.logging import setup_logging
|
||||
|
||||
setup_logging(json_logs=False, log_level="DEBUG")
|
||||
|
||||
load_dotenv(dotenv_path=".env")
|
||||
|
||||
@@ -124,6 +123,7 @@ class IPCounter:
|
||||
|
||||
app = FastAPI(lifespan=lifespan)
|
||||
|
||||
setup_logging()
|
||||
|
||||
if is_development:
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
from typing import List
|
||||
from typing import List, Optional
|
||||
|
||||
import structlog
|
||||
from structlog.types import EventDict, Processor
|
||||
from itertools import chain
|
||||
|
||||
|
||||
def rename_event_key(_, __, event_dict: EventDict) -> EventDict:
|
||||
"""
|
||||
Renames the `event` key to `msg`, as Railway expects it in that form.
|
||||
"""
|
||||
print(event_dict)
|
||||
event_dict["msg"] = event_dict.pop("event")
|
||||
return event_dict
|
||||
|
||||
@@ -86,17 +85,27 @@ def setup_logging(json_logs: bool = False, log_level: str = "INFO"):
|
||||
root_logger.addHandler(handler)
|
||||
root_logger.setLevel(log_level.upper())
|
||||
|
||||
def configure_logger(name: str, clear: bool, propagate: bool) -> None:
|
||||
def configure_logger(name: str, level: Optional[str] = None, clear: Optional[bool] = None, propagate: Optional[bool] = None) -> None:
|
||||
logger = logging.getLogger(name)
|
||||
if clear:
|
||||
|
||||
if level is not None:
|
||||
logger.setLevel(level.upper())
|
||||
|
||||
if clear is True:
|
||||
logger.handlers.clear()
|
||||
|
||||
if propagate is not None:
|
||||
logger.propagate = propagate
|
||||
|
||||
for _log in ["uvicorn", "uvicorn.error"]:
|
||||
|
||||
# Clear the log handlers for uvicorn loggers, and enable propagation
|
||||
# so the messages are caught by our root logger and formatted correctly
|
||||
# by structlog
|
||||
configure_logger(_log, clear=True, propagate=False)
|
||||
configure_logger("uvicorn", clear=True, propagate=True)
|
||||
configure_logger("uvicorn.error", clear=True, propagate=True)
|
||||
|
||||
configure_logger("apscheduler.executors.default", level="WARNING")
|
||||
|
||||
|
||||
# Since we re-create the access logs ourselves, to add all information
|
||||
# in the structured log (see the `logging_middleware` in main.py), we clear
|
||||
|
||||
Reference in New Issue
Block a user