feat: add LOG_COLORS env setting to toggle console ANSI colors

This commit is contained in:
Fringg
2026-02-17 05:15:03 +03:00
parent 094609005a
commit 27309f53d9
3 changed files with 22 additions and 12 deletions

View File

@@ -845,6 +845,8 @@ VERSION_CHECK_INTERVAL_HOURS=1
# ===== ЛОГИРОВАНИЕ =====
LOG_LEVEL=INFO
LOG_FILE=logs/bot.log
# ANSI-цвета в консоли (true — цветной вывод с Rich, false — plain-text)
LOG_COLORS=true
# === Ротация логов ===
# Включить новую систему ротации (по умолчанию старое поведение)

View File

@@ -549,6 +549,7 @@ class Settings(BaseSettings):
LOG_LEVEL: str = 'INFO'
LOG_FILE: str = 'logs/bot.log'
LOG_COLORS: bool = True # ANSI-цвета в консоли (false для plain-text вывода)
# === Log Rotation Settings ===
LOG_ROTATION_ENABLED: bool = False # По умолчанию старое поведение

View File

@@ -121,24 +121,31 @@ def setup_logging() -> tuple[logging.Formatter, logging.Formatter, Any]:
],
)
# Console formatter: colors enabled by default on non-Windows.
# Console formatter: colors controlled by LOG_COLORS env var (default: true).
# Rich tracebacks with conservative limits to avoid 5000-line dumps.
use_colors = settings.LOG_COLORS
console_renderer_kwargs: dict[str, Any] = {
'colors': use_colors,
'pad_event_to': 0,
'pad_level': False,
}
if use_colors:
console_renderer_kwargs['exception_formatter'] = structlog.dev.RichTracebackFormatter(
show_locals=False,
max_frames=20,
extra_lines=1,
width=120,
suppress=['aiogram', 'aiohttp'],
)
else:
console_renderer_kwargs['exception_formatter'] = structlog.dev.plain_traceback
console_formatter = structlog.stdlib.ProcessorFormatter(
foreign_pre_chain=shared_processors,
processors=[
structlog.stdlib.ProcessorFormatter.remove_processors_meta,
_prefix_logger_name,
structlog.dev.ConsoleRenderer(
pad_event_to=0,
pad_level=False,
exception_formatter=structlog.dev.RichTracebackFormatter(
show_locals=False,
max_frames=20,
extra_lines=1,
width=120,
suppress=['aiogram', 'aiohttp'],
),
),
structlog.dev.ConsoleRenderer(**console_renderer_kwargs),
],
)