如果使用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的更多相关文章

  1. Django 日志配置

    Django日志处理 settings配置 ########### # LOGGING # ########### BASE_LOG_DIR = os.path.join(os.path.dirnam ...

  2. django 日志logging的配置以及处理

    django日志官方文档https://docs.djangoproject.com/en/1.11/topics/logging/ 本文摘自http://davidbj.blog.51cto.com ...

  3. django日志,django-crontab,django邮件模块

    django 日志 四大块,格式器,过滤器,处理器,日志管理器 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatt ...

  4. Django日志信息路径的设置

    django日志信息路径的设置, 因为我们经常在代码业务上线时候 需要进行调试,查看代码的后台运行情况,就需要设置django项目的具体的日志信息运维的路径了 LOGGING = { 'version ...

  5. python的日志模块:logging;django的日志系统;django日志输出时间修改

    Django的log,主要是复用Python标准库中的logging模块,在settings.py中进行配置 源代码 1.__init__.py包含以下类: StreamHandler Formatt ...

  6. 18:django 日志系统

    django使用python内建的logging模块去建造自己的系统日志的,如果你想详细了解这个模块的话,请自己去看python的说明文档,这里仅仅介绍django中的日志系统 日志配置包括四个部分: ...

  7. Django日志

    Django日志 简单的Django日志 在settings里配置,会在屏幕输出日志 LOGGING = { 'version': 1, 'disable_existing_loggers': Fal ...

  8. 运维开发笔记整理-django日志配置

    运维开发笔记整理-django日志配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Django日志 Django使用python内建的logging模块打印日志,Pytho ...

  9. 八.django日志配置

    Django 日志 Django 使用Python 内建的logging 模块打印日志,Python 的logging 配置由四个部分组成: 记录器 —— Logger 处理程序 —— Handler ...

随机推荐

  1. 极光推送 JPush 简介 集成 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. [Math]理解卡尔曼滤波器 (Understanding Kalman Filter)

    1. 卡尔曼滤波器介绍 卡尔曼滤波器的介绍, 见 Wiki 这篇文章主要是翻译了 Understanding the Basis of the Kalman Filter Via a Simple a ...

  3. 【算法】Java-Redis-Hash算法对比-参考资料

    Java-Redis-Hash算法对比-参考资料 redis java map 红黑树_百度搜索 java使用redis缓存(String,bean,list,map) - CSDN博客 redis ...

  4. 【Scala】Scala-Option-Null的蹊跷

    Scala-Option-Null的蹊跷 scala Some(null)_百度搜索 scala - Why Some(null) isn't considered None? - Stack Ove ...

  5. Eclipse里选一个变量后,这个类里的该变量不变色了

    使用“Alt+Shift+O”对该提示功能的开/关切换

  6. Get file extention in XSLT

      When working with data view web parts or data form web parts in SharePoint, you might want to use ...

  7. ASP入门(二十二)-连接数据库

    ADO 简介 在 ASP 中访问数据库使用的 ADO 组件. ADO 是一项微软的技术. ADO 指 ActiveX 数据对象(ActiveX Data Objects). ADO 是微软的 Acti ...

  8. phpmyadmin误删表后如何恢复

    用mysqlbinlog php处理代码: 将mysql-bin.xxxxxx文件导出为可读文本: <?php //导出mysql-bin.000xxx文件为可读性txt文本 //0为执行成功, ...

  9. SuperMap开发入门1——资源下载

    前言(废话) 由于项目需要,我们将被改用超图(SuperMap)平台进行GIS开发.记忆中,我还是在学生时代使用过超图软件5.0版本,安装包只有50M,这也是超图与学校有合作关系的缘故. 在以后的学习 ...

  10. Swift语言精要 - 属性

    1. Stored Property eg: var number: Int = 0 2. Computed Property eg: var area : Double { get { return ...