Python的RotatingFileHandler的Bug
Python的库非常强大,基本能找到我们所有需要的lib。logging模块是Python中的日志记录库,借鉴了Java中的LOG4J模块的思想,能非常方便的用于记录软件执行日志。
最近有在开发自动化测试工具,刚好需要logging模块,但在使用logging模块的RotatingFileHandler时,常抛出异常。打印类似于如下异常信息:
lne 86, in __init__
rotatingHandler.doRollover()
File "c:\python24\lib\logging\handlers.py", line 131, in doRollover
os.rename(self.baseFilename, dfn)
OSError: [Errno 13] Permission denied
查看日志文件权限后,发现文件属性全为问号,而对其执行copy或者move命令后,文件属性恢复正常。网上有说是在多个地方调用Getlogger之后导致的问题,排查发现并无其他多余模块获取了同样的Logger,暂时无解。(后来发现:存在多个线程通过logging直接记录日志到日志文件,多线程同时操作一个日志文件可能导致该错误) 随后google到一篇早期讨论帖才找到办法:
1、找到logging库下的handlers.py文件,定位到RotatingFileHandler的基类的doRollover方法,修改如下代码:
try:
os.rename(self.baseFilename, dfn)
#记得先import shutil,替换为:
try:
shutil.move(self.baseFilename, dfn)
2、可能导致日志记录操作异常,如出现如下异常(异常信息来自网络):
Traceback (most recent call last):
File "C:\Python24\lib\logging\handlers.py", line 72, in emit
self.doRollover()
File "C:\Python24\lib\logging\handlers.py", line 141, in doRollover
self.handleError(record)
NameError: global name 'record' is not defined
请尝试如下修改:
if self.shouldRollover(record):
self.doRollover()
#修改为:
if self.shouldRollover(record):
self.doRollover(record)
3、按Ctrl+C退出程序时,可能将打印如下异常:
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "C:\Python24\lib\atexit.py", line 24, in _run_exitfuncs
func(*targs, **kargs)
File "C:\Python24\lib\logging\__init__.py", line 1333, in shutdown
h.close()
File "C:\Python24\lib\logging\__init__.py", line 772, in close
StreamHandler.close(self)
File "C:\Python24\lib\logging\__init__.py", line 674, in close
del _handlers[self]
KeyError: <logging.handlers.RotatingFileHandler instance at 0x01E098A0>
Error in sys.exitfunc:
Traceback (most recent call last):
File "C:\Python24\lib\atexit.py", line 24, in _run_exitfuncs
func(*targs, **kargs)
File "C:\Python24\lib\logging\__init__.py", line 1333, in shutdown
h.close()
File "C:\Python24\lib\logging\__init__.py", line 772, in close
StreamHandler.close(self)
File "C:\Python24\lib\logging\__init__.py", line 674, in close
del _handlers[self]
KeyError: <logging.handlers.RotatingFileHandler instance at 0x01E098A0>
请尝试如下修改:
_acquireLock()
try: #unlikely to raise an exception, but you never know...
del _handlers[self]
_handlerList.remove(self)
finally:
_releaseLock() #修改为:
_acquireLock()
try: #unlikely to raise an exception, but you never know...
#del _handlers[self]
if ( _handlers.has_key(self) ): del _handlers[self]
#if ( self in _handlerList ): _handlerList.remove(self)
_handlerList.remove(self)
finally:
_releaseLock()
原始讨论来自:http://www.44342.com/python-f871-t33115-p1.htm
Python的RotatingFileHandler的Bug的更多相关文章
- python实现测试报告的bug统计
背景:组内要针对每个项目生成测试报告,要对当前项目的一些bug进行统计.考虑到人工统计比较繁琐,而且是个长期的工作,所以写个脚本对bug进行自动统计.(我们用的bug平台是bugfree,直接可以导出 ...
- python学习中的bug
1.在pycharm的terminal中的python工程目录下update pip失败,但是在cmd中为什么就可以.’
- java 通过runtime 调用python 不显示python运行内容的bug
先说下上面问题的原因,上面问题是因为python中用到了第三方的类库,你的电脑上没有那个类库,所以程序没有运行,在控制台也就看不到输出.只要导入那个类库就好... python 导入类库,可以单独下载 ...
- 莫烦python课程里面的bug修复;课程爬虫小练习爬百度百科
我今天弄了一下午修改这个代码,最后还是弄好了.原因是正则表达式的筛选不够准确,有时候是会带http:baidu这些东西的.所以需要一个正则表达式的断言,然后还有一点是如果his里面只有一个元素就不要再 ...
- python下pip使用bug汇总
PS:以下操作全部基于win10 64位操作系统 pip安装任何包都出现问题: Cannot unpack file /tmp/pip-KzJgHD-unpack/simple 报错: Cannot ...
- Python开源库的bug
scipy 在misc的pilutil.py中def fromimage(im, flatten=0)函数中, # workaround for crash in PIL, see #1613.im. ...
- Python报错UnicodeDecodeError: ascii codec can t decode byte 0xe0 ...解决方法
用命令(python setup.py install)安装webpy时候总是报错 在网上搜索到的解决方法如下: 1. 这是Python 2 mimetypes的bug 2. 需要将Python2.7 ...
- python数据分析师面试题选
以下题目均非原创,只是汇总 python数据分析部分 1. 如何利用SciKit包训练一个简单的线性回归模型 利用linear_model.LinearRegression()函数 # Create ...
- python写的自动签到脚本。
等以后有时间补上. 附上代码: #! /usr/bin/env python # coding:utf-8 #-----------------------------------------学号和密 ...
随机推荐
- .NET中Redis安装部署及使用方法简介
一Redis服务端以服务方式运行 修改端口压缩文件中配置的是6488 修改密码 修改库的数量 工具配置安装后如下图 二Redis服务端以控制台方式运行 第一步配置本地服务 第二部安装和配置客户端 三C ...
- MySQL定义和变量赋值
变量可以在子程序(性能.存储过程.匿名块)声明和使用.这些变量的范围是在BEGIN...END规划. 变量的定义 语法格式: DECLARE var_name [, var_name]... data ...
- STL algorithmi算法s_sorted和is_sorted_until(28)
is_sort原型: ::is_sorted default (1) template <class ForwardIterator> bool is_sorted (ForwardIte ...
- JavaScript模块化编程之require.js与sea.js
为什么要模块化:当今,网站以不再是一个简单的页面,JavaScript也不再是做一些简单的脚本验证,随着WEB.20时代到来,前端工程师面临的必将是越来越庞大的JavaScript代码,越来越复杂的内 ...
- Cocos2d-x学习笔记(两)Cocos2d-x总体框架
原创文章.转载请注明出处:http://blog.csdn.net/sfh366958228/article/details/38680123 前言 上一节我们简单分析了HelloWorldproje ...
- API接口开发 配置、实现、测试
Yii2 基于RESTful架构的 advanced版API接口开发 配置.实现.测试 环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到 ...
- linux_创建用户_copy远程文件_解压缩_执行
查看历史命令: history 创建用户: sudo useradd -m -s /bin/bash cph [会自动创建cph文件夹,并将才cph文件夹权限和组设为cph] 创建用户密码: pas ...
- c# socket 判断端口是否被占用
using System.Net; using System.Net.Sockets; using System.Net.NetworkInformation; IPGlobalProperties ...
- 将程序添加到右键菜单和图标(以记事本、UltraEdit为例)
原文:将程序添加到右键菜单(以记事本.UltraEdit为例) 如何将程序加入右键菜单,这里分别以记事本.UltraEdit为例! 以记事本程序为例: 1. 在运行中输入regedit,打开注册表,找 ...
- Android Studio非gradleproject编译后的apk文件在哪?
非gradle的apk文件位置和gradle有一些差别,怎样找到apk文件在哪?我直接上图吧,选中project,右键: 在windows是选择"show in exlporer" ...