added logging rotators/json handler

This commit is contained in:
tpv committed 2026-06-24 13:17:29 -07:00
1 parent 5373e75e83
commit 0b9df71be9
2 files changed
+51 -7

No files matched your search

+51
View File
@@ -1,6 +1,8 @@
import logging
import json import json
import pathlib import pathlib
from functools import cache from functools import cache
from logging.handlers import RotatingFileHandler
from monitor_utils.constants import ( from monitor_utils.constants import (
PROXIES_PATH, PROXIES_PATH,
@@ -8,9 +10,58 @@ from monitor_utils.constants import (
DEVELOPMENT_MODE, DEVELOPMENT_MODE,
PRODUCTION_BOT_TOKEN, PRODUCTION_BOT_TOKEN,
DEVELOPMENT_BOT_TOKEN, DEVELOPMENT_BOT_TOKEN,
LOGGING_LEVEL,
DevelopmentMode, DevelopmentMode,
) )
RESERVED = frozenset(logging.LogRecord("", 0, "", 0, "", (), None).__dict__)
class JSONFormatter(logging.Formatter):
def format(self, record: logging.LogRecord) -> str:
payload = {
"time": self.formatTime(record),
"level": record.levelname,
"logger": record.name,
"function": record.funcName,
"message": record.getMessage(),
}
for key, value in record.__dict__.items():
if key not in RESERVED and not key.startswith("_"):
payload[key] = value
if record.exc_info:
payload["exc"] = self.formatException(record.exc_info)
return json.dumps(payload)
def configure_logging(monitor_name: str):
handler = logging.StreamHandler()
handler.setFormatter(JSONFormatter())
def inject_monitor(record: logging.LogRecord) -> bool:
record.monitor = monitor_name
return True
handler.addFilter(inject_monitor)
file_handler = RotatingFileHandler(
f"/logs/{monitor_name}.jsonl",
maxBytes=10 * 1024 * 1024,
backupCount=5,
)
file_handler.setFormatter(JSONFormatter())
file_handler.addFilter(inject_monitor)
root = logging.getLogger()
root.handlers.clear()
root.setLevel(LOGGING_LEVEL)
root.addHandler(handler)
root.addHandler(file_handler)
logging.getLogger("aiohttp").setLevel(logging.WARNING)
logging.getLogger("pymongo").setLevel(logging.WARNING)
def is_production(override_production=False) -> bool: def is_production(override_production=False) -> bool:
if override_production: if override_production:
-7
View File
@@ -27,13 +27,6 @@ from monitor_utils.database import get_collection
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
def configure_logging():
logging.basicConfig(
level=LOGGING_LEVEL,
format="%(asctime)s - %(levelname)s - %(module)s - %(funcName)s - %(message)s",
)
def setup_config( def setup_config(
monitor_name: str, override_production=False monitor_name: str, override_production=False
) -> tuple[list[str], dict, AsyncIOMotorCollection]: ) -> tuple[list[str], dict, AsyncIOMotorCollection]: