首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用python 3.3.4和RotatingFileHandler时的PermissionError

使用python 3.3.4和RotatingFileHandler时的PermissionError
EN

Stack Overflow用户
提问于 2014-03-18 00:25:17
回答 8查看 6.6K关注 0票数 7

我正在尝试为我用Python3.3.4和PyQt4编写的图形用户界面应用程序获取一个旋转日志文件。

我的主脚本中有以下代码片段:

代码语言:javascript
运行
复制
import logging
import resources

logger = logging.getLogger('main.test')

def main():
    logger.setLevel(logging.DEBUG)

    fh = RotatingFileHandler(resources.LOG_FILE_PATH, maxBytes=500, backupCount=5)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)

    logger.addHandler(fh)
    logger.info('main')

我把maxBytes调低了,这样我就可以测试旋转是否正常工作,而事实并非如此。每当应该轮换日志时,我都会收到以下错误:

代码语言:javascript
运行
复制
Traceback (most recent call last):
File "C:\Python33\lib\logging\handlers.py", line 73, in emit
self.doRollover()
File "C:\Python33\lib\logging\handlers.py", line 176, in doRollover
self.rotate(self.baseFilename, dfn)
File "C:\Python33\lib\logging\handlers.py", line 116, in rotate
os.rename(source, dest)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\myuser\\.logtest\\test.log.1'

并且没有记录任何内容。任何帮助都是非常感谢的。谢谢

EN

回答 8

Stack Overflow用户

发布于 2018-06-06 15:05:44

您可以直接在basicConfig()中指定处理程序,而不是将处理程序添加到记录器对象。如果您将RotatingFileHandler添加到记录器对象,那么一个对象可能会打开日志文件,同时另一个对象可能会尝试对其进行重命名,这将抛出PermissionError。

下面的代码似乎运行得很好。

代码语言:javascript
运行
复制
import logging
import resources
from logging.handlers import RotatingFileHandler

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[RotatingFileHandler(filename=resources.LOG_FILE_PATH, maxBytes=500, backupCount=5)])
logger = logging.getLogger('main.test')

def main():
    logger.setLevel(logging.DEBUG)
    logger.info('main')
票数 4
EN

Stack Overflow用户

发布于 2021-03-10 23:51:20

我花了半天的时间解决了我的问题。

我的工作解决方案是使用https://pypi.org/project/concurrent-log-handler/而不是RotatingFileHandler。在像Flask app这样的多线程场景中,当我们旋转达到最大大小的日志文件时,会引发PermissionError。

安装pypiwin32以消除No Module name win32con错误。

感谢访问https://www.programmersought.com/article/43941158027/

票数 3
EN

Stack Overflow用户

发布于 2019-07-03 05:05:31

不能在basicConfig()和RotatingFileHandler()中指定相同的文件名。我遇到了同样的问题,我从basicConfig()中删除了filename参数,现在它可以工作了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22459850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档