2025-04-08 21:07:45 +03:00
|
|
|
import os
|
|
|
|
os.environ["AUTO_CAST_FOR_DYNACONF"] = "false"
|
2023-10-16 14:56:00 +03:00
|
|
|
import json
|
|
|
|
import logging
|
|
|
|
import sys
|
|
|
|
from enum import Enum
|
|
|
|
|
|
|
|
from loguru import logger
|
|
|
|
|
2024-02-22 13:21:56 +02:00
|
|
|
from pr_agent.config_loader import get_settings
|
|
|
|
|
2023-10-16 14:56:00 +03:00
|
|
|
|
|
|
|
class LoggingFormat(str, Enum):
|
|
|
|
CONSOLE = "CONSOLE"
|
|
|
|
JSON = "JSON"
|
|
|
|
|
|
|
|
|
|
|
|
def json_format(record: dict) -> str:
|
|
|
|
return record["message"]
|
|
|
|
|
|
|
|
|
2024-02-22 13:21:56 +02:00
|
|
|
def analytics_filter(record: dict) -> bool:
|
|
|
|
return record.get("extra", {}).get("analytics", False)
|
|
|
|
|
|
|
|
|
2024-02-26 16:15:23 +02:00
|
|
|
def inv_analytics_filter(record: dict) -> bool:
|
|
|
|
return not record.get("extra", {}).get("analytics", False)
|
|
|
|
|
|
|
|
|
2023-10-16 14:56:00 +03:00
|
|
|
def setup_logger(level: str = "INFO", fmt: LoggingFormat = LoggingFormat.CONSOLE):
|
|
|
|
level: int = logging.getLevelName(level.upper())
|
|
|
|
if type(level) is not int:
|
|
|
|
level = logging.INFO
|
|
|
|
|
2024-02-24 16:47:23 +02:00
|
|
|
if fmt == LoggingFormat.JSON and os.getenv("LOG_SANE", "0").lower() == "0": # better debugging github_app
|
2023-10-16 14:56:00 +03:00
|
|
|
logger.remove(None)
|
|
|
|
logger.add(
|
|
|
|
sys.stdout,
|
2024-02-26 16:15:23 +02:00
|
|
|
filter=inv_analytics_filter,
|
2023-10-16 14:56:00 +03:00
|
|
|
level=level,
|
|
|
|
format="{message}",
|
|
|
|
colorize=False,
|
|
|
|
serialize=True,
|
|
|
|
)
|
2024-02-24 16:47:23 +02:00
|
|
|
elif fmt == LoggingFormat.CONSOLE: # does not print the 'extra' fields
|
2023-10-16 14:56:00 +03:00
|
|
|
logger.remove(None)
|
2024-02-26 16:15:23 +02:00
|
|
|
logger.add(sys.stdout, level=level, colorize=True, filter=inv_analytics_filter)
|
2023-10-16 14:56:00 +03:00
|
|
|
|
2024-02-23 17:30:20 +02:00
|
|
|
log_folder = get_settings().get("CONFIG.ANALYTICS_FOLDER", "")
|
|
|
|
if log_folder:
|
|
|
|
pid = os.getpid()
|
|
|
|
log_file = os.path.join(log_folder, f"pr-agent.{pid}.log")
|
2024-02-22 13:21:56 +02:00
|
|
|
logger.add(
|
|
|
|
log_file,
|
|
|
|
filter=analytics_filter,
|
|
|
|
level=level,
|
|
|
|
format="{message}",
|
|
|
|
colorize=False,
|
|
|
|
serialize=True,
|
|
|
|
)
|
|
|
|
|
2023-10-16 14:56:00 +03:00
|
|
|
return logger
|
|
|
|
|
|
|
|
|
|
|
|
def get_logger(*args, **kwargs):
|
|
|
|
return logger
|