从一个大文件(tomcat日志)中提取某一天的日志。
import sys
from pathlib import Path
def extract_date_logs(
log_path: str = "/opt/Seeyon/DEEService/DEE_Service/logs/catalina.out",
target_date: str = "2025-11-27",
output_path: str = "2025-11-27_catalina_logs.txt"
):
# 验证日志文件是否存在
log_file = Path(log_path)
if not log_file.exists() or not log_file.is_file():
print(f"错误:日志文件不存在或不是文件 -> {log_path}")
sys.exit(1)
# 统计匹配行数
match_count = 0
try:
# 逐行读取日志(低内存占用,支持超大文件)
with open(log_file, "r", encoding="utf-8", errors="ignore") as infile, \
open(output_path, "w", encoding="utf-8") as outfile:
for line in infile:
# 核心匹配:日志行以 "2025-11-27 " 开头(日期后带空格,适配 catalina.out 格式)
if line.startswith(f"{target_date} "):
outfile.write(line)
match_count += 1
except PermissionError:
print(f"错误:无权限读取日志文件或写入输出文件,请用 sudo 运行!")
sys.exit(1)
except Exception as e:
print(f"错误:处理日志时异常 -> {str(e)}")
sys.exit(1)
# 输出结果统计
if match_count > 0:
print(f"提取成功!共找到 {match_count} 行 {target_date} 日的日志")
print(f"日志已保存到:{output_path}")
else:
print(f"未找到 {target_date} 日的日志(可能该日期无日志,或日志格式不匹配)")
if __name__ == "__main__":
# 直接运行即可(默认参数已指向你的日志文件和目标日期)
extract_date_logs()