feat: ротация логов по размеру (RotatingFileHandler, 5 МБ, 5 бэкапов)

This commit is contained in:
deadzilla 2026-06-12 21:43:00 +05:00
parent 9c7909bde5
commit 4027b7df6c
2 changed files with 22 additions and 6 deletions

View File

@ -42,7 +42,9 @@ def test_invalid_level_defaults_to_info() -> None:
def test_file_handler_when_logs_dir_exists() -> None:
"""FileHandler добавляется если директория logs существует."""
"""RotatingFileHandler добавляется если директория logs существует."""
import logging.handlers
orig_cwd = os.getcwd()
with tempfile.TemporaryDirectory() as tmpdir:
logs_dir = Path(tmpdir) / "logs"
@ -51,7 +53,11 @@ def test_file_handler_when_logs_dir_exists() -> None:
try:
with _isolated_logger() as root:
file_handlers = [h for h in root.handlers if isinstance(h, logging.FileHandler)]
file_handlers = [
h
for h in root.handlers
if isinstance(h, logging.handlers.RotatingFileHandler)
]
assert len(file_handlers) >= 1
# Закрыть file handler чтобы освободить файл на Windows
for h in file_handlers:
@ -62,6 +68,8 @@ def test_file_handler_when_logs_dir_exists() -> None:
def test_logs_dir_created_automatically() -> None:
"""Директория logs создаётся автоматически, если её нет."""
import logging.handlers
orig_cwd = os.getcwd()
with tempfile.TemporaryDirectory() as tmpdir:
os.chdir(tmpdir)
@ -72,7 +80,11 @@ def test_logs_dir_created_automatically() -> None:
try:
with _isolated_logger() as root:
assert logs_dir.exists()
file_handlers = [h for h in root.handlers if isinstance(h, logging.FileHandler)]
file_handlers = [
h
for h in root.handlers
if isinstance(h, logging.handlers.RotatingFileHandler)
]
assert len(file_handlers) >= 1
# Закрыть file handler чтобы освободить файл на Windows
for h in file_handlers:

View File

@ -6,6 +6,7 @@
"""
import logging
import logging.handlers
import os
import sys
from pathlib import Path
@ -34,11 +35,14 @@ def setup_logging() -> logging.Logger:
root.setLevel(level)
root.addHandler(console)
# File handler — logs/bot.log
# File handler — logs/bot.log с ротацией по размеру (5 МБ, 5 бэкапов)
log_dir = Path("logs")
log_dir.mkdir(parents=True, exist_ok=True)
file_handler = logging.FileHandler(
log_dir / "bot.log", encoding="utf-8"
file_handler = logging.handlers.RotatingFileHandler(
log_dir / "bot.log",
maxBytes=5 * 1024 * 1024, # 5 МБ
backupCount=5,
encoding="utf-8",
)
file_handler.setLevel(level)
file_handler.setFormatter(formatter)