feat: ротация логов по размеру (RotatingFileHandler, 5 МБ, 5 бэкапов)
This commit is contained in:
parent
9c7909bde5
commit
4027b7df6c
@ -42,7 +42,9 @@ def test_invalid_level_defaults_to_info() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def test_file_handler_when_logs_dir_exists() -> None:
|
def test_file_handler_when_logs_dir_exists() -> None:
|
||||||
"""FileHandler добавляется если директория logs существует."""
|
"""RotatingFileHandler добавляется если директория logs существует."""
|
||||||
|
import logging.handlers
|
||||||
|
|
||||||
orig_cwd = os.getcwd()
|
orig_cwd = os.getcwd()
|
||||||
with tempfile.TemporaryDirectory() as tmpdir:
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
logs_dir = Path(tmpdir) / "logs"
|
logs_dir = Path(tmpdir) / "logs"
|
||||||
@ -51,7 +53,11 @@ def test_file_handler_when_logs_dir_exists() -> None:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
with _isolated_logger() as root:
|
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
|
assert len(file_handlers) >= 1
|
||||||
# Закрыть file handler чтобы освободить файл на Windows
|
# Закрыть file handler чтобы освободить файл на Windows
|
||||||
for h in file_handlers:
|
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:
|
def test_logs_dir_created_automatically() -> None:
|
||||||
"""Директория logs создаётся автоматически, если её нет."""
|
"""Директория logs создаётся автоматически, если её нет."""
|
||||||
|
import logging.handlers
|
||||||
|
|
||||||
orig_cwd = os.getcwd()
|
orig_cwd = os.getcwd()
|
||||||
with tempfile.TemporaryDirectory() as tmpdir:
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
os.chdir(tmpdir)
|
os.chdir(tmpdir)
|
||||||
@ -72,7 +80,11 @@ def test_logs_dir_created_automatically() -> None:
|
|||||||
try:
|
try:
|
||||||
with _isolated_logger() as root:
|
with _isolated_logger() as root:
|
||||||
assert logs_dir.exists()
|
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
|
assert len(file_handlers) >= 1
|
||||||
# Закрыть file handler чтобы освободить файл на Windows
|
# Закрыть file handler чтобы освободить файл на Windows
|
||||||
for h in file_handlers:
|
for h in file_handlers:
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import logging.handlers
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@ -34,11 +35,14 @@ def setup_logging() -> logging.Logger:
|
|||||||
root.setLevel(level)
|
root.setLevel(level)
|
||||||
root.addHandler(console)
|
root.addHandler(console)
|
||||||
|
|
||||||
# File handler — logs/bot.log
|
# File handler — logs/bot.log с ротацией по размеру (5 МБ, 5 бэкапов)
|
||||||
log_dir = Path("logs")
|
log_dir = Path("logs")
|
||||||
log_dir.mkdir(parents=True, exist_ok=True)
|
log_dir.mkdir(parents=True, exist_ok=True)
|
||||||
file_handler = logging.FileHandler(
|
file_handler = logging.handlers.RotatingFileHandler(
|
||||||
log_dir / "bot.log", encoding="utf-8"
|
log_dir / "bot.log",
|
||||||
|
maxBytes=5 * 1024 * 1024, # 5 МБ
|
||||||
|
backupCount=5,
|
||||||
|
encoding="utf-8",
|
||||||
)
|
)
|
||||||
file_handler.setLevel(level)
|
file_handler.setLevel(level)
|
||||||
file_handler.setFormatter(formatter)
|
file_handler.setFormatter(formatter)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user