Django logging配置及使用详解


Posted in Python onJuly 23, 2019

1. settings.py文件

做开发离不开必定离不开日志, 以下是我在工作中写Django项目常用的logging配置.

# 日志配置
BASE_LOG_DIR = os.path.join(BASE_DIR, "log")

LOGGING = {
  'version': 1, # 保留字
  'disable_existing_loggers': False, # 是否禁用已经存在的日志实例
  'formatters': { # 定义日志的格式
    'standard': {
      'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
           '[%(levelname)s][%(message)s]'
    },
    'simple': {
      'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
    },
    'collect': {
      'format': '%(message)s'
    }
  },
  'filters': { # 定义日志的过滤器
    'require_debug_true': {
      '()': 'django.utils.log.RequireDebugTrue',
    },
  },
  'handlers': { # 日志处理程序
    'console': {
      'level': 'DEBUG',
      'filters': ['require_debug_true'], # 只有在Django debug为True时才在屏幕打印日志
      'class': 'logging.StreamHandler',
      'formatter': 'simple'
    },
    'SF': {
      'level': 'INFO',
      'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,根据文件大小自动切
      'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"), # 日志文件
      'maxBytes': 1024 * 1024 * 500, # 日志大小 50M(最好不要超过1G)
      'backupCount': 3, # 备份数为3 xx.log --> xx.log.1 --> xx.log.2 --> xx.log.3
      'formatter': 'standard',
      'encoding': 'utf-8', # 文件记录的编码格式
    },
    'TF': {
      'level': 'INFO',
      'class': 'logging.handlers.TimedRotatingFileHandler', # 保存到文件,根据时间自动切
      'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"), # 日志文件
      'backupCount': 3, # 备份数为3 xx.log --> xx.log.2018-08-23_00-00-00 --> xx.log.2018-08-24_00-00-00 --> ...
      'when': 'D', # 每天一切, 可选值有S/秒 M/分 H/小时 D/天 W0-W6/周(0=周一) midnight/如果没指定时间就默认在午夜
      'formatter': 'standard',
      'encoding': 'utf-8',
    },
    'error': {
      'level': 'ERROR',
      'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
      'filename': os.path.join(BASE_LOG_DIR, "xxx_err.log"), # 日志文件
      'maxBytes': 1024 * 1024 * 5, # 日志大小 50M
      'backupCount': 5,
      'formatter': 'standard',
      'encoding': 'utf-8',
    },
    'collect': {
      'level': 'INFO',
      'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
      'filename': os.path.join(BASE_LOG_DIR, "xxx_collect.log"),
      'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
      'backupCount': 5,
      'formatter': 'collect',
      'encoding': "utf-8"
    }
  },
  'loggers': { # 日志实例
    '': { # 默认的logger应用如下配置
      'handlers': ['SF', 'console', 'error'], # 上线之后可以把'console'移除
      'level': 'DEBUG',
      'propagate': True, # 是否向上一级logger实例传递日志信息
    },
    'collect': { # 名为 'collect' 的logger还单独处理
      'handlers': ['console', 'collect'],
      'level': 'INFO',
    }
  },
}

2. 在Django根目录下创建log文件夹

3. logging的使用

有了logging配置之后, 我们在今后的项目中, 就尽量不再使用print语句来打印信息, 进行BUG调试. 更专业的我们将使用logger对象来保存并打印错误信息.

例如:

import logging

# 实例化logging对象,并以当前文件的名字作为logger实例的名字
logger = logging.getLogger(__name__)
# 生成一个名字叫做 collect 的日志实例
logger_c = logging.getLogger('collect')

class Foo(object):
  def test(self, data):
    logger.debug(data) # 打印data
    try:
      ...
    except Exception as e:
      logger.error(str(e))  # 保存并打印错误信息

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python求素数示例分享
Feb 16 Python
python处理大数字的方法
May 27 Python
Python实现调度算法代码详解
Dec 01 Python
Python编程实现线性回归和批量梯度下降法代码实例
Jan 04 Python
python docx 中文字体设置的操作方法
May 08 Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 Python
python的依赖管理的实现
May 14 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 Python
python爬虫模拟浏览器访问-User-Agent过程解析
Dec 28 Python
Tensorflow中的降维函数tf.reduce_*使用总结
Apr 20 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
Dec 03 Python
python神经网络学习 使用Keras进行简单分类
May 04 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 #Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
Jul 23 #Python
提升Python效率之使用循环机制代替递归函数
Jul 23 #Python
深入了解Django View(视图系统)
Jul 23 #Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 #Python
flask框架单元测试原理与用法实例分析
Jul 23 #Python
Python3的高阶函数map,reduce,filter的示例详解
Jul 23 #Python
You might like
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
JavaScript简单下拉菜单实例代码
2015/09/07 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
Vue实现简易购物车页面
2020/12/30 Vue.js
vue实现可移动的悬浮按钮
2021/03/04 Vue.js
使用Kivy将python程序打包为apk文件
2017/07/29 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
浅谈python中get pass用法
2019/03/19 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
django rest framework serializers序列化实例
2020/05/13 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
民生工程实施方案
2014/03/22 职场文书
读书之星事迹材料
2014/05/12 职场文书
校园环保标语
2014/06/13 职场文书
名人演讲稿范文
2014/09/16 职场文书
学生保证书格式
2015/02/27 职场文书
辩论赛主持人开场白
2015/05/29 职场文书
开学典礼致辞
2015/07/29 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js