回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我对Django的旋转文件处理程序有问题。</p>
<p>问题是,当文件达到maxBytes大小时,它不会创建新文件,并在尝试执行logger.info(“任何消息”)时给出错误消息:</p>
<p>奇怪的是:</p>
<ol>
<li>没有人分享伐木者,视图会有自己的伐木者,芹菜的任务会有自己的伐木者。</li>
<li><p>记录器只在文件顶部启动一次(chartLogger=getLogger…)。同一文件中的不同函数将使用相同的名称</p>
<pre><code>Logged from file views.py, line 1561
Traceback (most recent call last):
File "C:\Python27\lib\logging\handlers.py", line 77, in emit
self.doRollover()
File "C:\Python27\lib\logging\handlers.py", line 142, in doRollover
os.rename(self.baseFilename, dfn)
WindowsError: [Error 32] The process cannot access the file because it is being used by another process
</code></pre></li>
</ol>
<p>在我的settings.py中,我有:</p>
<pre><code> LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters' : {
'standard' : {
'format' : '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
},
},
'handlers': {
'celery.webapp' : {
'level' : 'ERROR',
'class' : 'django.utils.log.AdminEmailHandler',
},
'celery' : {
'level' : 'INFO',
'class' : 'logging.handlers.RotatingFileHandler',
'filename' : 'logs/celery.log',
'maxBytes' : 1024*1024*10, # 10MB
'backupCount' : 10,
'formatter' : 'standard',
},
'views.error' : {
'level' : 'ERROR',
'class' : 'django.utils.log.AdminEmailHandler',
},
'views' : {
'level' : 'INFO',
'class' : 'logging.handlers.RotatingFileHandler',
'filename' : 'logs/views.log',
'maxBytes' : 1024*1024*10, # 10MB
'backupCount' : 10,
'formatter' : 'standard',
},
},
'loggers': {
'celery.webapp' : {
'level' : 'ERROR',
'handlers' : ['celery.webapp'],
'propogate' : True,
},
'celery.webapp.task' : {
'level' : 'INFO',
'handlers' : ['celery'],
'propogate' : True,
},
'views.logger' : {
'level' : 'ERROR',
'handlers' : ['views.error'],
'propogate' : True,
},
'views.logger.login' : {
'level' : 'INFO',
'handlers' : ['views'],
'propogate' : True,
},
'views.logger.register' : {
'level' : 'INFO',
'handlers' : ['views'],
'propogate' : True,
},
'views.logger.chartConfigure' : {
'level' : 'INFO',
'handlers' : ['views'],
'propogate' : True,
},
'views.logger.sendEmail' : {
'level' : 'INFO',
'handlers' : ['views'],
'propogate' : True,
},
},
}
</code></pre>
<p>我试过改变不同的文件大小,但是它被限制在maxBytes。</p>
<p>尽管它说进程不能访问该文件,因为它正被其他进程使用。在达到maxBytes之前,所有的日志记录都很好。</p>
<p>编辑:</p>
<p>我把伐木分为芹菜和姜果。</p>
<pre><code>LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters' : {
'standard' : {
'format' : '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
},
},
'handlers': {
'celery.webapp' : {
'level' : 'ERROR',
'class' : 'django.utils.log.AdminEmailHandler',
},
'celery' : {
'level' : 'INFO',
'class' : 'logging.handlers.RotatingFileHandler',
'filename' : 'logs/celery.log',
'maxBytes' : 1024*1024*10, # 10MB
'backupCount' : 10,
'formatter' : 'standard',
},
'celery_chartConfigure' : {
'level' : 'INFO',
'class' : 'logging.handlers.RotatingFileHandler',
'filename' : 'logs/celery_chartConfigure.log',
'maxBytes' : 1024*1024*10, # 10MB
'backupCount' : 10,
'formatter' : 'standard',
},
'celery_register' : {
'level' : 'INFO',
'class' : 'logging.handlers.RotatingFileHandler',
'filename' : 'logs/celery_register.log',
'maxBytes' : 1024*1024*10, # 10MB
'backupCount' : 10,
'formatter' : 'standard',
},
'views.error' : {
'level' : 'ERROR',
'class' : 'django.utils.log.AdminEmailHandler',
},
'views' : {
'level' : 'INFO',
'class' : 'logging.handlers.RotatingFileHandler',
'filename' : 'logs/views.log',
'maxBytes' : 1024*1024*10, # 10MB
'backupCount' : 10,
'formatter' : 'standard',
},
'views_login' : {
'level' : 'INFO',
'class' : 'logging.handlers.RotatingFileHandler',
'filename' : 'logs/views_login.log',
'maxBytes' : 1024*1024*10, # 10MB
'backupCount' : 10,
'formatter' : 'standard',
},
'views_sendEmail' : {
'level' : 'INFO',
'class' : 'logging.handlers.RotatingFileHandler',
'filename' : 'logs/views_sendEmail.log',
'maxBytes' : 1024*1024*10, # 10MB
'backupCount' : 10,
'formatter' : 'standard',
},
'views_register' : {
'level' : 'INFO',
'class' : 'logging.handlers.RotatingFileHandler',
'filename' : 'logs/views_register.log',
'maxBytes' : 1024*1024*10, # 10MB
'backupCount' : 10,
'formatter' : 'standard',
},
'views_chartConfigure' : {
'level' : 'INFO',
'class' : 'logging.handlers.RotatingFileHandler',
'filename' : 'logs/views_chartConfigure.log',
'maxBytes' : 1024*1024*10, # 10MB
'backupCount' : 10,
'formatter' : 'standard',
},
},
'loggers': {
'celery.webapp' : {
'level' : 'ERROR',
'handlers' : ['celery.webapp'],
'propogate' : True,
},
'celery.webapp.task' : {
'level' : 'INFO',
'handlers' : ['celery'],
'propogate' : True,
},
'celery.webapp.chartConfigure' : {
'level' : 'INFO',
'handlers' : ['celery_chartConfigure'],
'propogate' : True,
},
'celery.webapp.register' : {
'level' : 'INFO',
'handlers' : ['celery_register'],
'propogate' : True,
},
'views.logger' : {
'level' : 'ERROR',
'handlers' : ['views.error'],
'propogate' : True,
},
'views.logger.login' : {
'level' : 'INFO',
'handlers' : ['views_login'],
'propogate' : True,
},
'views.logger.register' : {
'level' : 'INFO',
'handlers' : ['views_register'],
'propogate' : True,
},
'views.logger.chartConfigure' : {
'level' : 'INFO',
'handlers' : ['views_chartConfigure'],
'propogate' : True,
},
'views.logger.sendEmail' : {
'level' : 'INFO',
'handlers' : ['views_sendEmail'],
'propogate' : True,
},
},
}
</code></pre>
<p>然而,它仍然有问题做多洛弗。</p>
<p>在芹菜和姜果之间分割原木不会解决这个问题吗?因为访问日志的不是几个进程,而是Django或Celery。</p>
<p>编辑2:</p>
<p>我也在做Ajax调用。这是否会以某种方式产生另一个可能会干扰日志记录的进程?</p>