如何在Python中批量检查PostgreSQL日志文件是否为空并跳过空文件上传至Slack
批量过滤非空PostgreSQL日志文件并上传至Slack的Python实现
嗨,作为Python新手能想到用os.stat检查文件大小已经迈出了很好的一步!针对你需要批量处理动态命名日志文件、跳过空文件的需求,我来给你拆解实现步骤并提供完整代码:
核心思路
- 匹配目标日志文件:利用通配符批量获取所有符合
postgresql.log.xxxx-xx-xx-xxxx格式的日志文件 - 过滤空文件:遍历文件列表,筛选出文件大小大于0的非空文件
- 批量处理非空文件:将筛选后的文件传入你的Slack上传逻辑
完整示例代码
import os import glob def upload_to_slack(file_path): # 这里替换成你现有的Slack上传代码 print(f"正在上传文件: {file_path}") # 1. 获取所有符合格式的PostgreSQL日志文件 # 如果日志不在当前脚本目录,替换成实际路径,比如 "/var/log/postgresql/postgresql.log.*" log_files = glob.glob("postgresql.log.*") # 2. 过滤出非空文件 non_empty_logs = [file for file in log_files if os.stat(file).st_size > 0] # 3. 批量上传非空文件到Slack for log_file in non_empty_logs: try: upload_to_slack(log_file) print(f"文件 {log_file} 上传完成") except Exception as e: print(f"上传文件 {log_file} 失败: {str(e)}")
代码解释
glob.glob("postgresql.log.*"):通过通配符*匹配所有以postgresql.log.开头的文件,完美适配你动态变化的日期时间命名格式- 列表推导式筛选非空文件:一行代码完成遍历和过滤,比循环判断更简洁高效
- 异常处理:添加
try-except块可以避免单个文件上传失败导致整个脚本中断,适合生产环境使用
额外优化建议
- 如果日志文件分布在子目录中,可以使用递归匹配:
glob.glob("**/postgresql.log.*", recursive=True) - 可以添加日志文件的时间范围过滤(比如只处理最近24小时的日志),结合
os.path.getmtime()获取文件修改时间来实现 - 若需要避免重复上传,可以记录已上传的文件名到本地文件或数据库,下次运行时跳过已处理的文件
内容的提问来源于stack exchange,提问作者Gifter Villanueva
相关产品推荐
相关产品推荐

