日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常。在生产环境下有很大的用处。在java 开发中通常用 log4j,logback 等三方组件。那么在 django中是怎么处理日志的呢。django 利用的就是python 提供的 logging模块. 在前面有一篇文章专门讲过 python的 logging ,但django中要用logging ,还得有一定的配置规律,需要在setting 中配置:


LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(levelname)s]- %(message)s'
        },
    },
    'filters': {
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'include_html': True,
        },
        'default': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(STATIC_ROOT+'/logs/','all.log'), #或者直接写路径:'c:\logs\all.log',
            'maxBytes': 1024*1024*5, # 5 MB
            'backupCount': 5,
            'formatter':'standard',
        },
        'console':{
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'standard'
        },
        'request_handler': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(STATIC_ROOT+'/logs/','script.log'), #或者直接写路径:'filename':'c:\logs\request.log''  
            'maxBytes': 1024*1024*5, # 5 MB
            'backupCount': 5,
            'formatter':'standard',
        },
        'scprits_handler': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(STATIC_ROOT+'/logs/','script.log'), #或者直接写路径:'filename':'c:\logs\script.log'
            'maxBytes': 1024*1024*5, # 5 MB
            'backupCount': 5,
            'formatter':'standard',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['default','console'],
            'level': 'DEBUG',
            'propagate': False
        },
        'XieYin.app':{
            'handlers': ['default','console'],
            'level': 'DEBUG',
            'propagate': True         
        },
        'django.request': {
            'handlers': ['request_handler'],
            'level': 'DEBUG',
            'propagate': False
        },
        'scripts': { # 脚本专用日志
            'handlers': ['scprits_handler'],
            'level': 'INFO',
            'propagate': False
        },
    }
}

下面专门讲解一下: 其实这个配置与python 传统的logging 很类似.
formatters 用来配置 日志打印的格式
handlers ,用来定义具体处理日志的方式,可以定义很多种,"default" 就是默认方式,"console" 就是打印到控制台方式.
loggers 是用来配置用哪几种 handlers 来处理日志,比如你同时需要输出日志到文件,和到控制台,那就必须配置  两种handlers. 在上面的例子中 'XieYin.app" 是典型的例子.

有一点必须注意的是 loggers 类型 为"django" 这将处理所有类型的日志.
另外 为什么我配置了一个  'XieYin.app' 的logger,这是因为 django 会根据包的层次结构去找 应该用那个 logger 来处理日志,如果找不到,就不输出日志,而我的项目要输出日志的views.py 都是是放在 XieYin.app  下面的。而且当系统查找是否配置有相应的logger的时候,如果本身这个module 没有logger ,就查找父类是否有logger。比如有一个module:XieYin.app.comment.views.  如果在这里面用如下方式写日志:
views.py 中

程序代码

import logging
logger = logging.getLogger('XieYin.app')
logger.info('aaa')
logger.error('error occurs')

这个时候也会找到 XieYin.app 去处理,虽然没有定义 "XieYin.app.comment.views" 这样的logger,它会再他的父类找。

知道了原理,在view中就如同上面介绍的那样,应用就好了

程序代码

import logging
logger = logging.getLogger(__name__) # 这里用__name__通用,自动检测.
logger.info('aaa')
logger.error('error')

你如果既想看 自己在程序中输出的日志,又想看django自己输出的日志,特别是sql 语句,那么根据上面介绍的,你可以这样做:

程序代码

import logging
logger = logging.getLogger('django') # 这里用__name__通用,自动检测.
logger.info('aaa')
logger.error('error')

django/python日志logging 的配置以及处理相关推荐

  1. Python 日志logging模块初探及多线程踩坑(2)

    系列文章: Python 日志logging模块初探及多线程踩坑(1) Python 日志logging模块初探及多线程踩坑(2) 接着上面一篇文章,我们这篇来写一个多进程兼容且无损性能的 Timed ...

  2. Python零基础速成班-第11讲-Python日志Logging,小游戏设计game of life

    Python零基础速成班-第11讲-Python日志Logging,小游戏设计game of life 学习目标 Python日志Logging 小游戏设计game of life 课后作业(2必做) ...

  3. python 日志 logging模块(详细解析)

    1 基本使用 转自:https://www.cnblogs.com/wf-linux/archive/2018/08/01/9400354.html 配置logging基本的设置,然后在控制台输出日志 ...

  4. python多个日志模块怎么隔离_在多个模块中使用Python日志logging

    最好的做法是在每个模块中都有一个像这样定义的logging器: import logging logger = logging.getLogger(__name__) 靠近模块的顶部,然后在模块的其他 ...

  5. python 日志 logging 的用法

    python logging 的用法 视频 https://www.bilibili.com/video/BV1sK4y1x7e1?from=search&seid=3961255759492 ...

  6. 2.Pycharm + Django + Python进行WEB路由配置

    一.普通路由配置 1.利用PyCharm创建工程名为mysite的Django项目,在mysite文件上新建views.py视图文件,如下图示: 2.在urls.py文件中导入view.py视图文件 ...

  7. django+python+美图秀秀配置1

    终于要写一篇原创的文章了 ,以前都是考的,这次终于有自己原创了,哥现在的心情哪!不废话,start... 美图秀秀网页版是中国最流行的在线图片处理工具,在线使用,无需下载!独有的图片特效让你1分钟打造 ...

  8. flask学习之日志logging

    文章目录 1.flask中的logging 参考文献 开发的web项目需要记录日志,本来打算使用python中的logging模块,但是,进入flask的官网发现自带有日志模块,直接使用flask中的 ...

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

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

最新文章

  1. JAVA工程师必学技能,进阶涨薪的推进器!这份实战教程请收下
  2. python快速处理ppt_人生苦短,我用 Python 之快速遍历 PPT
  3. 形态学图像处理(二)
  4. html前端如何缓存页面,Nuxt中如何做页面html缓存
  5. etc php5 conf.d,php – nginx:[emerg]“location”指令不允许在/etc/nginx/conf.d/default.conf中使用:...
  6. GoLand 快速入门教程
  7. IOS拍照控件同时显示拍照与录像
  8. Android WebView重定向问题的解决方案
  9. MySQL数据库远程连接很慢的解决方案
  10. centos安装mysql wsl_win10安装wsl2和docker
  11. 【Android】自己定义控件——仿天猫Indicator
  12. VC MFC 换肤 SkinSharp
  13. VS2010版最常用的快捷键和其他快捷键
  14. 魅族计算机软件不见了,任务栏不见了
  15. 神经网络模型的实际案例,神经网络模型应用实例
  16. 计算的威力,智慧的传奇——Fabrice Bellard
  17. java实现微信定时发送消息
  18. 转:这些道理不懂,你注定就是穷打工的命
  19. 【野火】完成延时模块自己测试基于麒麟座
  20. 如何让《隐秘的角落》快速大结局?只需要一份保险......

热门文章

  1. linux 6查看防火墙指令,centos67 常用系统防火墙命令
  2. hive 2.3 mysql_Hive(二)CentOS7.5安装Hive2.3.3
  3. linux fread 头文件,Linux文件操作
  4. plaintextedit指定一行一行的高亮显示_RDKit | 基于RDKit的指定原子或键高亮
  5. java生成点阵图_Android从SD卡读取图片并显示为点阵图
  6. Linux在线升级ruby
  7. krpano html5略缩图边框颜色,krpano加载场景缩略图列表
  8. 排名算法(三)--排序学习
  9. Java项目迁移到uap上_Tomcat启动,不能加载项目问题。
  10. Android开发环境搭建(Android Studio安装)