简要说明:
base.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)大小时备份日志文件。
答案 0 :(得分:1)
您可能在某些其他程序中打开了日志文件,这就是无法重命名的原因。这可能是您的某个程序,也可能是在磁盘文件上运行的防病毒或全文索引器。
答案 1 :(得分:1)
我在开发烧瓶应用程序时遇到了同样的错误。为了解决这个问题,我不得不改变环境变量
"FLASK_DEBUG=1"
到"FLASK_DEBUG=0"
。转向调试的原因是导致线程错误。我在阅读this blog
答案 2 :(得分:0)
我的猜测是,由于您导入了两次base.py,因此RotatingFileHandler设置了两次,因此可以通过两个进程访问它。
由于这个原因,我今天遇到了类似的问题。详情here。
我建议不要导入base.py,而是在app_main1.py和app_main2.py中创建子记录器。您可以参考documentation here。