added logging rotators/json handler
This commit is contained in:
1 parent
5373e75e83
commit
0b9df71be9
2 files changed
+51
-7
No files matched your search
@@ -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:
|
||||||
|
|||||||
@@ -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]:
|
||||||
|
|||||||
Reference in new issue
Block a user