django日志使用TimeRotateFileHandler
如果使用django的settings.py设置日志会产生一些问题。
问题描述
报错信息如下:
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
使用windows自带的资源管理器查看占用该文件的进程,在CPU标签页中搜索文件名即可:
可以发现有两个进程同时占用日志文件,打开任务管理器也能找到两个Python进程。如果杀死其中一个,另一个进程也会随之消失。
解决方法
python manage.py runserver --noreload
这个命令表示不启动监控文件变化的进程。
原因
Django默认启用两个进程,一个进程用来检测文件变化,另一个进程是正经的服务器进程。settting.py这个文件被加载了两次,也就是日志文件打开了两次,如果是服务器进程先启动,则看不出毛病来;如果是监控进程首先打开了从settings.py加载了日志,那么正经服务器进程就无法再次加载日志了。
代码
如果手动设置日志
from logging.handlers import TimedRotatingFileHandler
def get_log():
LOG_DIR = os.path.join(os.path.expanduser("~"), "json_manager", "logs")
if not os.path.exists(LOG_DIR):
os.mkdir(LOG_DIR)
logHandler = TimedRotatingFileHandler(os.path.join(LOG_DIR, "crawler.log"),
when='D', # 以when为单位
interval=3, # 每个日志文件为interval个when
backupCount=15, # 保留15个when
encoding='utf8')
logFormat = logging.Formatter("%(levelname)s %(asctime)s %(message)s")
logHandler.setFormatter(logFormat)
log = logging.getLogger("crawler") # 日志只允许在当前进程中访问
log.addHandler(logHandler)
log.setLevel("INFO")
return log
参考资料
Django logging with RotatingFileHandler error
django日志使用TimeRotateFileHandler的更多相关文章
- Django 日志配置
Django日志处理 settings配置 ########### # LOGGING # ########### BASE_LOG_DIR = os.path.join(os.path.dirnam ...
- django 日志logging的配置以及处理
django日志官方文档https://docs.djangoproject.com/en/1.11/topics/logging/ 本文摘自http://davidbj.blog.51cto.com ...
- django日志,django-crontab,django邮件模块
django 日志 四大块,格式器,过滤器,处理器,日志管理器 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatt ...
- Django日志信息路径的设置
django日志信息路径的设置, 因为我们经常在代码业务上线时候 需要进行调试,查看代码的后台运行情况,就需要设置django项目的具体的日志信息运维的路径了 LOGGING = { 'version ...
- python的日志模块:logging;django的日志系统;django日志输出时间修改
Django的log,主要是复用Python标准库中的logging模块,在settings.py中进行配置 源代码 1.__init__.py包含以下类: StreamHandler Formatt ...
- 18:django 日志系统
django使用python内建的logging模块去建造自己的系统日志的,如果你想详细了解这个模块的话,请自己去看python的说明文档,这里仅仅介绍django中的日志系统 日志配置包括四个部分: ...
- Django日志
Django日志 简单的Django日志 在settings里配置,会在屏幕输出日志 LOGGING = { 'version': 1, 'disable_existing_loggers': Fal ...
- 运维开发笔记整理-django日志配置
运维开发笔记整理-django日志配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Django日志 Django使用python内建的logging模块打印日志,Pytho ...
- 八.django日志配置
Django 日志 Django 使用Python 内建的logging 模块打印日志,Python 的logging 配置由四个部分组成: 记录器 —— Logger 处理程序 —— Handler ...
随机推荐
- Android -- ConditionVariable
线程操作经常用到wait和notify,用起来稍显繁琐,而Android给我们封装好了一个ConditionVariable类,用于线程同步.提供了三个方法block().open().close() ...
- Docker worker nodes shown as “Down” after re-start
After docker is shutdown, the worker node changes its status to Down, but availability remains at A ...
- (转)真正的中国天气api接口xml,json(求加精) ...
我只想说现在网上那几个api完全坑爹有木有??? 官方的申请不来有木有,还有收费有木有?? 咱这种菜鸟只能用免费的了!!!! http://m.weather.com.cn/data/101110 ...
- curl_setopt — 设置 cURL 传输选项
curl_setopt (PHP 4 >= 4.0.2, PHP 5, PHP 7) curl_setopt — 设置 cURL 传输选项 bool curl_setopt ( resource ...
- PHP Manager for IIS
SOAP error on IIS8 Registering new PHP version sets bad values set for FastCGI activityTimeout, requ ...
- DOM对象操作html元素1
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- matlab之simulink仿真入门
Matlab Simulink仿真工具的应用 ****Simulink是一个用来对动态系统进行建模.仿真和分析的软件包.使用Simulink来建模.分析和仿真各种动态系统(包含连续系统.离散系统和混合 ...
- js escape 与php escape
javascript有编码函数escape()和对应的解码函数unescape(),而php中只有个urlencode和urldecode,这个编码和解码函数对encodeURI和encodeURIC ...
- ActiveMQ面试专题
https://blog.csdn.net/belvine/article/details/79399798
- android studio开发的时候出现design editor is unavailable until after a successful project sync问题的解决方法
android studio设计界面的时候,出现了报错:design editor is unavailable until after a successful project sync,导致无法编 ...