96 lines
2.5 KiB
Python
96 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
测试日志轮转修复的脚本
|
|
"""
|
|
|
|
import logging
|
|
import time
|
|
import threading
|
|
from pathlib import Path
|
|
import sys
|
|
import os
|
|
|
|
# 添加src目录到路径
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
|
|
|
|
from common.logger import get_logger, force_initialize_logging, get_log_stats
|
|
|
|
|
|
def test_concurrent_logging():
|
|
"""测试并发日志写入"""
|
|
logger = get_logger("test")
|
|
|
|
def log_worker(worker_id):
|
|
"""工作线程函数"""
|
|
for i in range(100):
|
|
logger.info(f"工作线程 {worker_id} - 消息 {i}: 这是一条测试日志消息,用于测试并发写入和轮转功能")
|
|
time.sleep(0.01)
|
|
|
|
# 创建多个线程并发写入日志
|
|
threads = []
|
|
for i in range(5):
|
|
thread = threading.Thread(target=log_worker, args=(i,))
|
|
threads.append(thread)
|
|
thread.start()
|
|
|
|
# 等待所有线程完成
|
|
for thread in threads:
|
|
thread.join()
|
|
|
|
print("并发日志测试完成")
|
|
|
|
|
|
def test_log_rotation():
|
|
"""测试日志轮转"""
|
|
logger = get_logger("rotation_test")
|
|
|
|
# 生成大量日志来触发轮转
|
|
large_message = "这是一条很长的日志消息用于测试轮转功能。" * 100
|
|
|
|
print("开始生成大量日志以触发轮转...")
|
|
for i in range(1000):
|
|
logger.info(f"轮转测试消息 {i}: {large_message}")
|
|
if i % 100 == 0:
|
|
print(f"已生成 {i} 条日志...")
|
|
|
|
print("日志轮转测试完成")
|
|
|
|
|
|
def main():
|
|
"""主函数"""
|
|
print("开始测试日志系统修复...")
|
|
|
|
# 强制初始化日志系统
|
|
force_initialize_logging()
|
|
|
|
# 显示初始日志统计
|
|
stats = get_log_stats()
|
|
print(f"初始日志统计: {stats}")
|
|
|
|
# 测试并发日志
|
|
print("\n=== 测试并发日志写入 ===")
|
|
test_concurrent_logging()
|
|
|
|
# 测试日志轮转
|
|
print("\n=== 测试日志轮转 ===")
|
|
test_log_rotation()
|
|
|
|
# 显示最终日志统计
|
|
stats = get_log_stats()
|
|
print(f"\n最终日志统计: {stats}")
|
|
|
|
# 检查日志文件
|
|
log_dir = Path("logs")
|
|
if log_dir.exists():
|
|
log_files = list(log_dir.glob("app.log*"))
|
|
print(f"\n生成的日志文件:")
|
|
for log_file in sorted(log_files):
|
|
size = log_file.stat().st_size / 1024 / 1024 # MB
|
|
print(f" {log_file.name}: {size:.2f} MB")
|
|
|
|
print("\n测试完成!如果没有出现权限错误,说明修复成功。")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |