diff --git a/pr_agent/log/__init__.py b/pr_agent/log/__init__.py index 73e38e76..f618cb76 100644 --- a/pr_agent/log/__init__.py +++ b/pr_agent/log/__init__.py @@ -6,6 +6,8 @@ from enum import Enum from loguru import logger +from pr_agent.config_loader import get_settings + class LoggingFormat(str, Enum): CONSOLE = "CONSOLE" @@ -16,6 +18,10 @@ def json_format(record: dict) -> str: return record["message"] +def analytics_filter(record: dict) -> bool: + return record.get("extra", {}).get("analytics", False) + + def setup_logger(level: str = "INFO", fmt: LoggingFormat = LoggingFormat.CONSOLE): level: int = logging.getLevelName(level.upper()) if type(level) is not int: @@ -34,6 +40,19 @@ def setup_logger(level: str = "INFO", fmt: LoggingFormat = LoggingFormat.CONSOLE logger.remove(None) logger.add(sys.stdout, level=level, colorize=True) + 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") + logger.add( + log_file, + filter=analytics_filter, + level=level, + format="{message}", + colorize=False, + serialize=True, + ) + return logger diff --git a/pr_agent/servers/github_app.py b/pr_agent/servers/github_app.py index fb24d234..b365bfd6 100644 --- a/pr_agent/servers/github_app.py +++ b/pr_agent/servers/github_app.py @@ -1,7 +1,8 @@ +import asyncio.locks import copy import os -import asyncio.locks import re +import uuid from typing import Any, Dict, List, Tuple import uvicorn @@ -14,10 +15,10 @@ from pr_agent.agent.pr_agent import PRAgent from pr_agent.algo.utils import update_settings_from_args from pr_agent.config_loader import get_settings, global_settings from pr_agent.git_providers import get_git_provider -from pr_agent.git_providers.utils import apply_repo_settings from pr_agent.git_providers.git_provider import IncrementalPR +from pr_agent.git_providers.utils import apply_repo_settings from pr_agent.log import LoggingFormat, get_logger, setup_logger -from pr_agent.servers.utils import verify_signature, DefaultDictWithTimeout +from pr_agent.servers.utils import DefaultDictWithTimeout, verify_signature setup_logger(fmt=LoggingFormat.JSON) @@ -204,7 +205,8 @@ async def handle_request(body: Dict[str, Any], event: str): return {} agent = PRAgent() sender = body.get("sender", {}).get("login") - log_context = {"action": action, "event": event, "sender": sender, "server_type": "github_app"} + log_context = {"action": action, "event": event, "sender": sender, "server_type": "github_app", + "request_id": uuid.uuid4().hex} # handle comments on PRs if action == 'created':