2

简短的 :

基础.py:

import logging
from logging.handlers import TimedRotatingFileHandler
import os

slogFile = os.path.join(os.getcwd(), 'LOGS', 'App_Debug.log')
if True != os.path.isdir(os.path.join(os.getcwd(), 'LOGS')):
    os.mkdir(os.path.join(os.getcwd(), 'LOGS'))
logging.basicConfig(filename=slogFile, level=logging.DEBUG)
logging.basicConfig(format='%(asctime)s %(message)s')
logger = logging.getLogger("myApp")   
fmt = logging.Formatter(fmt='%(asctime)s %(message)s')
size=1024*1024*1 #1mb file size
logger = logging.getLogger("myApp")   
fmt = logging.Formatter(fmt='%(asctime)s %(message)s')

hdlr = logging.handlers.RotatingFileHandler(filename = slogFile ,mode='w', maxBytes=size, backupCount=5, encoding=None, delay=0)
hdlr.setFormatter(fmt)
logger.addHandler(hdlr)</em>

app_main1.py:

import base

base.logger.debug('xxx')

app_main2.py:

import base

base.logger.debug('xxx')

注意:对于我的应用程序,我正在使用另一个模块,该模块也将日志记录到同一文件中。

我收到此错误:

Traceback (most recent call last):

 File "C:\Python27\lib\logging\handlers.py", line 78, in emit

   self.doRollover()

 File "C:\Python27\lib\logging\handlers.py", line 141, in doRollover

  os.rename(self.baseFilename, dfn)

WindowsError: [Error 32] The process cannot access the file because it is being used by another process

从文件记录app_main1.py,第 59 行

你能给我解释一下吗?

我想在日志文件达到最大(1mb)大小时备份它。

4

3 回答 3

2

您可能在其他程序中打开了日志文件,这就是它无法重命名的原因。这可能是您的程序之一,或者是在磁盘文件上运行的防病毒或全文索引器。

于 2013-11-11T21:40:17.450 回答
2

我在开发烧瓶应用程序时遇到了同样的错误。为了解决这个问题,我不得不将环境变量从 更改 "FLASK_DEBUG=1""FLASK_DEBUG=0"。原因是打开调试会导致线程错误。阅读此博客后我得到了解决方案

于 2017-06-05T15:19:26.523 回答
1

我的猜测是,由于您两次导入 base.py,RotatingFileHandler 设置了两次,因此它被两个进程访问。

由于这个原因,我今天遇到了类似的问题。详情在这里

我建议不要导入 base.py,而是在 app_main1.py 和 app_main2.py 中创建一个子记录器。你可以参考这里的文档

于 2014-05-02T03:02:29.497 回答