82 lines
2.7 KiB
Python
82 lines
2.7 KiB
Python
import logging
|
|
import os
|
|
import tempfile
|
|
|
|
from python.log_system.logger import (
|
|
ANSI_RESET,
|
|
ColoredFormatter,
|
|
SafeRotatingFileHandler,
|
|
parse_rotated_log_filename,
|
|
rotated_log_filename,
|
|
)
|
|
|
|
|
|
def test_colored_formatter_uses_root_label_and_context_badges():
|
|
formatter = ColoredFormatter(
|
|
use_colors=True,
|
|
include_milliseconds=False,
|
|
include_brackets=True,
|
|
)
|
|
record = logging.LogRecord(
|
|
"azlogs.module",
|
|
logging.INFO,
|
|
"test_file.py",
|
|
12,
|
|
"message",
|
|
(),
|
|
None,
|
|
)
|
|
|
|
formatted = formatter.format(record)
|
|
badge_prefix = "\033[97;48;2;38;63;76m "
|
|
timestamp = formatter._format_time(record)
|
|
|
|
assert f"{badge_prefix}[{timestamp}] {ANSI_RESET}" in formatted
|
|
assert "[module]" in formatted
|
|
assert formatted.count(badge_prefix) == 2
|
|
|
|
|
|
def test_rotated_log_filename_keeps_log_as_final_extension():
|
|
path = os.path.join("logs", "azlogs_LayerForge.log.3")
|
|
assert rotated_log_filename(path) == os.path.join("logs", "azlogs_LayerForge.3.log")
|
|
assert rotated_log_filename("logs/azlogs_LayerForge.log") == "logs/azlogs_LayerForge.log"
|
|
|
|
|
|
def test_parse_rotated_log_filename_accepts_current_style_and_rejects_legacy():
|
|
assert parse_rotated_log_filename("azlogs_LayerForge.2.log") == ("azlogs_LayerForge", 2)
|
|
assert parse_rotated_log_filename("azlogs_LayerForge.log") == ("azlogs_LayerForge", 0)
|
|
assert parse_rotated_log_filename("other.txt") is None
|
|
assert parse_rotated_log_filename("azlogs_LayerForge.log.2") is None
|
|
|
|
|
|
def test_safe_rotating_file_handler_keeps_log_extension_last():
|
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
log_path = os.path.join(temp_dir, "azlogs_LayerForge.log")
|
|
test_logger = logging.getLogger(f"test-log-rotation-{id(log_path)}")
|
|
test_logger.handlers.clear()
|
|
test_logger.propagate = False
|
|
test_logger.setLevel(logging.INFO)
|
|
handler = SafeRotatingFileHandler(
|
|
log_path,
|
|
maxBytes=32,
|
|
backupCount=2,
|
|
encoding="utf-8",
|
|
)
|
|
handler.setFormatter(logging.Formatter("%(message)s"))
|
|
test_logger.addHandler(handler)
|
|
|
|
try:
|
|
test_logger.info("first message large enough to rotate")
|
|
test_logger.info("second message large enough to rotate")
|
|
test_logger.info("third message large enough to rotate")
|
|
handler.flush()
|
|
finally:
|
|
test_logger.removeHandler(handler)
|
|
handler.close()
|
|
|
|
files = set(os.listdir(temp_dir))
|
|
assert "azlogs_LayerForge.log" in files
|
|
assert "azlogs_LayerForge.1.log" in files
|
|
assert "azlogs_LayerForge.2.log" in files
|
|
assert "azlogs_LayerForge.log.1" not in files
|