fix: dedupe cs_agent logs and add colored console output
This commit is contained in:
@@ -29,14 +29,43 @@ def _get_transfer_group(acc_id: str) -> str:
|
|||||||
return default_group
|
return default_group
|
||||||
|
|
||||||
# ========== 日志配置(轮转:按大小 10MB,保留 7 份)==========
|
# ========== 日志配置(轮转:按大小 10MB,保留 7 份)==========
|
||||||
|
class _AnsiColorFormatter(logging.Formatter):
|
||||||
|
RESET = "\033[0m"
|
||||||
|
COLORS = {
|
||||||
|
logging.DEBUG: "\033[36m", # cyan
|
||||||
|
logging.INFO: "\033[32m", # green
|
||||||
|
logging.WARNING: "\033[33m", # yellow
|
||||||
|
logging.ERROR: "\033[31m", # red
|
||||||
|
logging.CRITICAL: "\033[35m", # magenta
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, fmt: str, datefmt: str | None = None, use_color: bool = True):
|
||||||
|
super().__init__(fmt=fmt, datefmt=datefmt)
|
||||||
|
self.use_color = use_color
|
||||||
|
|
||||||
|
def format(self, record: logging.LogRecord) -> str:
|
||||||
|
msg = super().format(record)
|
||||||
|
if not self.use_color:
|
||||||
|
return msg
|
||||||
|
color = self.COLORS.get(record.levelno, "")
|
||||||
|
if not color:
|
||||||
|
return msg
|
||||||
|
return f"{color}{msg}{self.RESET}"
|
||||||
|
|
||||||
|
|
||||||
def setup_logger():
|
def setup_logger():
|
||||||
from logging.handlers import RotatingFileHandler
|
from logging.handlers import RotatingFileHandler
|
||||||
from config.config import LOG_DIR, LOG_MAX_BYTES, LOG_BACKUP_COUNT
|
from config.config import LOG_DIR, LOG_MAX_BYTES, LOG_BACKUP_COUNT
|
||||||
logger = logging.getLogger("cs_agent")
|
logger = logging.getLogger("cs_agent")
|
||||||
|
if getattr(logger, "_cs_logger_configured", False):
|
||||||
|
return logger
|
||||||
logger.setLevel(logging.INFO)
|
logger.setLevel(logging.INFO)
|
||||||
|
# 避免同一日志既被 cs_agent 打印,又向 root logger 传播再打一遍。
|
||||||
|
logger.propagate = False
|
||||||
fmt = logging.Formatter("[%(asctime)s] %(message)s", datefmt="%H:%M:%S")
|
fmt = logging.Formatter("[%(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 = logging.StreamHandler()
|
||||||
ch.setFormatter(fmt)
|
ch.setFormatter(_AnsiColorFormatter("[%(asctime)s] %(message)s", datefmt="%H:%M:%S", use_color=use_color))
|
||||||
logger.addHandler(ch)
|
logger.addHandler(ch)
|
||||||
LOG_DIR.mkdir(exist_ok=True)
|
LOG_DIR.mkdir(exist_ok=True)
|
||||||
today = datetime.now().strftime("%Y-%m-%d")
|
today = datetime.now().strftime("%Y-%m-%d")
|
||||||
@@ -48,6 +77,7 @@ def setup_logger():
|
|||||||
)
|
)
|
||||||
fh.setFormatter(fmt)
|
fh.setFormatter(fmt)
|
||||||
logger.addHandler(fh)
|
logger.addHandler(fh)
|
||||||
|
logger._cs_logger_configured = True
|
||||||
return logger
|
return logger
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|||||||
Reference in New Issue
Block a user