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 相关文章推荐
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
python控制台中实现进度条功能
Nov 10 Python
python3实现跳一跳点击跳跃
Jan 08 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
Oct 17 Python
python实现任意位置文件分割的实例
Dec 14 Python
Python安装selenium包详细过程
Jul 23 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
PyCharm下载和安装详细步骤
Dec 17 Python
python序列化与数据持久化实例详解
Dec 20 Python
Python手动或自动协程操作方法解析
Jun 22 Python
Pytest中skip和skipif的具体使用方法
Jun 30 Python
python字典的元素访问实例详解
Jul 21 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
PHP设计模式之责任链模式的深入解析
2013/06/13 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
JS编程小常识很有用
2012/11/26 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
jQuery实现的form转json经典示例
2017/10/10 jQuery
React Native 图片查看组件的方法
2018/03/01 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
英国羊皮鞋类领先品牌:Just Sheepskin
2019/12/12 全球购物
企业安全标语
2014/06/07 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
违反工作规定检讨书范文
2014/12/14 职场文书
2014年保险业务员工作总结
2014/12/23 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
国博复兴之路观后感
2015/06/02 职场文书
淮海战役观后感
2015/06/11 职场文书
2016年教师新年寄语
2015/08/18 职场文书
python3 hdf5文件 遍历代码
2021/05/19 Python