Python logging.handlers.WatchedFileHandler位置及获取方法咨询
解决Python 2.7中WatchedFileHandler找不到的问题
嘿,我来帮你捋清楚这个问题——你找不到WatchedFileHandler大概率是导入方式不对,而不是这个模块不存在,毕竟Python 2.7的标准库logging里确实自带它。
正确的导入姿势
WatchedFileHandler并不在logging根模块下,而是藏在logging.handlers子模块里,你得这么导入:
# 方法1:先导入子模块再调用 import logging.handlers handler = logging.handlers.WatchedFileHandler("/path/to/your/app.log") # 方法2:直接导入这个类 from logging.handlers import WatchedFileHandler handler = WatchedFileHandler("/path/to/your/app.log")
如果之前你只写了import logging就想直接用logging.WatchedFileHandler,那肯定会报错找不到,因为这个类根本不在根模块里。
关于logging版本的小说明
你看到的logging.__version__是0.5.1.2,这其实是Python 2.7自带logging模块的版本号,完全没问题——WatchedFileHandler早在Python 2.3就被加入到logging.handlers里了,你的环境里肯定有这个类,只是没找对地方而已。
配合logrotate的小提醒
用WatchedFileHandler和logrotate搭配的时候,记得别在logrotate配置里用copytruncate选项!因为WatchedFileHandler是通过检测日志文件的inode变化来重新打开新日志的,而copytruncate只会复制文件内容再清空原文件,inode不会变,这样handler会一直往旧的文件内容里写,达不到轮转的效果。给你个参考的logrotate配置:
/var/log/your_app/app.log { daily rotate 14 missingok notifempty compress delaycompress postrotate # 这里不需要给进程发信号,WatchedFileHandler会自动检测文件变化 true endscript }
内容的提问来源于stack exchange,提问作者downer
相关产品推荐
相关产品推荐

