feat: improve routing logs and tuhui integration
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import logging
|
||||
import os
|
||||
import subprocess
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class _AnsiColorFormatter(logging.Formatter):
|
||||
@@ -56,20 +58,67 @@ class _AnsiColorFormatter(logging.Formatter):
|
||||
return f"{color}{msg}{self.RESET}"
|
||||
|
||||
|
||||
_APP_VERSION = None
|
||||
_LOG_RECORD_FACTORY_INSTALLED = False
|
||||
|
||||
|
||||
def get_app_log_version() -> str:
|
||||
global _APP_VERSION
|
||||
if _APP_VERSION:
|
||||
return _APP_VERSION
|
||||
|
||||
env_version = str(os.getenv("APP_VERSION", "")).strip()
|
||||
if env_version:
|
||||
_APP_VERSION = env_version
|
||||
return _APP_VERSION
|
||||
|
||||
try:
|
||||
repo_root = Path(__file__).resolve().parent.parent
|
||||
git_version = subprocess.check_output(
|
||||
["git", "-C", str(repo_root), "rev-parse", "--short", "HEAD"],
|
||||
stderr=subprocess.DEVNULL,
|
||||
text=True,
|
||||
).strip()
|
||||
except Exception:
|
||||
git_version = ""
|
||||
|
||||
_APP_VERSION = git_version or "dev"
|
||||
os.environ.setdefault("APP_VERSION", _APP_VERSION)
|
||||
return _APP_VERSION
|
||||
|
||||
|
||||
def install_log_record_factory():
|
||||
global _LOG_RECORD_FACTORY_INSTALLED
|
||||
if _LOG_RECORD_FACTORY_INSTALLED:
|
||||
return
|
||||
|
||||
version = get_app_log_version()
|
||||
old_factory = logging.getLogRecordFactory()
|
||||
|
||||
def record_factory(*args, **kwargs):
|
||||
record = old_factory(*args, **kwargs)
|
||||
record.app_version = getattr(record, "app_version", version)
|
||||
return record
|
||||
|
||||
logging.setLogRecordFactory(record_factory)
|
||||
_LOG_RECORD_FACTORY_INSTALLED = True
|
||||
|
||||
|
||||
def setup_logger():
|
||||
from logging.handlers import RotatingFileHandler
|
||||
from config.config import LOG_DIR, LOG_MAX_BYTES, LOG_BACKUP_COUNT
|
||||
|
||||
install_log_record_factory()
|
||||
logger = logging.getLogger("cs_agent")
|
||||
if getattr(logger, "_cs_logger_configured", False):
|
||||
return logger
|
||||
logger.setLevel(logging.INFO)
|
||||
logger.propagate = False
|
||||
fmt = logging.Formatter("[%(asctime)s] %(message)s", datefmt="%H:%M:%S")
|
||||
fmt = logging.Formatter("[v%(app_version)s][%(asctime)s] %(message)s", datefmt="%H:%M:%S")
|
||||
use_color = (os.getenv("LOG_COLOR", "1").lower() in ("1", "true", "yes")) and not bool(os.getenv("NO_COLOR"))
|
||||
|
||||
ch = logging.StreamHandler()
|
||||
ch.setFormatter(_AnsiColorFormatter("[%(asctime)s] %(message)s", datefmt="%H:%M:%S", use_color=use_color))
|
||||
ch.setFormatter(_AnsiColorFormatter("[v%(app_version)s][%(asctime)s] %(message)s", datefmt="%H:%M:%S", use_color=use_color))
|
||||
logger.addHandler(ch)
|
||||
|
||||
LOG_DIR.mkdir(exist_ok=True)
|
||||
|
||||
Reference in New Issue
Block a user