用 watchdog 库监听文件改动并用 logging 记录日志,精准捕获 create/modify/delete/move 事件,过滤非关键文件,按天轮转日志,异常自动恢复,支持命令行参数与优雅退出。

用 Python 监控文件改动并自动生成日志,核心是轻量、可靠、易维护——不需要上复杂框架,watchdog 库 + 标准 logging 模块 就足够应付绝大多数日常场景。
监听指定路径,只关注关键事件
watchdog 能精准捕获 create、modify、delete、move 四类事件,避免轮询带来的资源浪费。重点不是“所有改动都记”,而是按需过滤:比如只记录 .py 和 .txt 文件的修改,跳过临时文件(~、.swp、.tmp)和系统隐藏文件。
- 继承 FileSystemEventHandler 类,重写 on_modified、on_created 等方法
- 在事件处理函数里加判断:if event.is_directory or not event.src_path.endswith((‘.py’, ‘.txt’)): return
- 用 event.src_path 获取绝对路径,避免相对路径导致日志混乱
日志格式统一,带时间+操作+文件+用户(可选)
一条有效日志至少包含:ISO 时间戳、事件类型、文件路径、触发动作的用户名(Linux/OS 可用 getpass.getuser();Windows 下建议 fallback 到 ‘unknown’)。不推荐用 print 打印,必须走 logging 配置。
- 用 logging.bConfig() 设置日志级别为 INFO,输出到文件(如 monitor.log),并启用时间格式
- 每条记录用 logger.info(f”[{event.event_type}] {event.src_path}”) 输出,结构清晰易 grep
- 日志文件建议按天轮转:TimedRotatingFileHandler 配合 when=’midnight’
守护运行不中断,异常自动恢复
脚本常驻后台时,最怕 watchdog 崩溃或目录被临时卸载。需包裹主监听循环,捕获 OSError、OSError 13(权限拒绝)、OSError 2(路径不存在)等常见错误。
一句话/一张图一键智能生成社交媒体图片的AI设计神器
108 立即学习“”;
- 用 while True + try/except 包住 Observer.start() 后的逻辑
- 遇到路径失效(如 U 盘拔出),sleep 3 秒后尝试重建 observer 并重新 watch
- 记录异常到日志:logger.error(f”Watch fled: {e}”, exc_info=True),方便排查
启动与退出可控,支持命令行参数
加简单 argparse 支持传入监控路径和日志位置,让脚本真正可用。退出时务必调用 observer.stop() + observer.join(),避免残留线程。
- 示例命令: filewatch.py –path /home/user/docs –log ./audit.log
- 用 signal.signal(signal.SIGINT, lambda s, f: cleanup()) 捕获 Ctrl+C
- cleanup() 函数里 stop observer、关闭 logger handler、打印“已停止监控”
基本上就这些。不复杂但容易忽略细节——比如没关 handler 导致日志写不全,或没过滤 .swp 文件刷屏。跑通一次,后续复制粘贴改路径就能复用。
以上就是Python自动化检测文件改动并生成日志记录的脚本方案【技巧】的详细内容,更多请关注php中文网其它相关文章!
微信扫一扫打赏
支付宝扫一扫打赏
