Implement log_manager module with LoggerPrint and LogManager

This commit is contained in:
2026-04-16 15:11:02 +03:00
parent cd1bd21f63
commit 212210c5a1
7 changed files with 585 additions and 2 deletions

156
tests/test_log_manager.py Normal file
View File

@@ -0,0 +1,156 @@
import os
import tempfile
from pathlib import Path
from src.utils.log_manager import (
parse_size,
FileHandlerFactory,
LoggerPrint,
LogManager,
register,
register_global_params,
get_logger,
setup,
print as log_print,
get_log_manager,
LOG_CATEGORY,
LOG_CONSOLE,
LOG_STDERR,
LOG_FILE,
LOG_PATH,
LOG_LEVEL,
LOG_ROTATION,
LOG_ROTATION_SIZE,
LOG_ROTATION_COUNT,
LOG_TIMESTAMP,
DEFAULT_TIMESTAMP,
)
def test_parse_size():
assert parse_size("100B") == 100
assert parse_size("1KB") == 1024
assert parse_size("1MB") == 1024 * 1024
assert parse_size("1GB") == 1024 * 1024 * 1024
assert parse_size("10MB") == 10 * 1024 * 1024
def test_constants():
assert LOG_CATEGORY == "logger"
assert LOG_CONSOLE == "log_console"
assert LOG_STDERR == "log_stderr"
assert LOG_FILE == "log_file"
assert DEFAULT_TIMESTAMP == "%Y-%m-%d %H:%M:%S"
def test_file_handler_factory():
with tempfile.TemporaryDirectory() as tmpdir:
tmpdir_path = Path(tmpdir)
tmpdir_path.mkdir(parents=True, exist_ok=True)
handler = FileHandlerFactory.create(
tmpdir, "test.log", rotation="size", max_bytes="1KB", backup_count=3
)
assert handler is not None
assert isinstance(handler.backupCount, int)
assert handler.backupCount == 3
handler.close()
def test_logger_print():
logger = LoggerPrint(
name="komAI.test", module_name="test", console_enabled=True, stderr_enabled=True
)
logger.print("Test message", level="info")
logger.print("Warning message", level="warning")
logger.print("Error message", level="error")
def test_log_manager_registration():
import src.utils.config_manager as config
config.config.reset()
register_global_params()
register(module="test_mod", log_console=True, log_file="test_mod.log")
logger = get_logger("test_mod")
assert logger is not None
assert logger.module_name == "test_mod"
def test_log_manager_no_console():
import src.utils.config_manager as config
config.config.reset()
register_global_params()
register(module="test_mod", log_console=False)
logger = get_logger("test_mod")
assert logger.console_enabled is False
def test_log_manager_with_file():
import src.utils.config_manager as config
config.config.reset()
register_global_params()
with tempfile.TemporaryDirectory() as tmpdir:
register(module="test_mod", log_file="test_mod.log")
config.config.set(LOG_PATH, tmpdir, cat=LOG_CATEGORY)
logger = get_logger("test_mod")
assert logger.file_enabled is True
def test_log_manager_print():
import src.utils.config_manager as config
config.config.reset()
register_global_params()
register(module="test_mod", log_console=True)
setup()
log_print("Global print test", level="info")
def test_get_log_manager_singleton():
mgr1 = get_log_manager()
mgr2 = get_log_manager()
assert mgr1 is mgr2
def run_tests():
tests = [
test_parse_size,
test_constants,
test_file_handler_factory,
test_logger_print,
test_log_manager_registration,
test_log_manager_no_console,
test_log_manager_with_file,
test_log_manager_print,
test_get_log_manager_singleton,
]
passed = 0
failed = 0
for test in tests:
try:
test()
print(f"PASS: {test.__name__}")
passed += 1
except Exception as e:
print(f"FAIL: {test.__name__} - {e}")
failed += 1
print(f"\n{passed}/{passed + failed} tests passed")
return failed == 0
if __name__ == "__main__":
success = run_tests()
exit(0 if success else 1)