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 相关文章推荐
Pyramid将models.py文件的内容分布到多个文件的方法
Nov 27 Python
Python创建文件和追加文件内容实例
Oct 21 Python
Python pickle模块用法实例分析
May 27 Python
Python内置模块turtle绘图详解
Dec 09 Python
解读python logging模块的使用方法
Apr 17 Python
Python二叉树定义与遍历方法实例分析
May 25 Python
python2 与 python3 实现共存的方法
Jul 12 Python
Pythony运维入门之Socket网络编程详解
Apr 15 Python
python对验证码降噪的实现示例代码
Nov 12 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
python绘制无向图度分布曲线示例
Nov 22 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 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之第十天
2006/10/09 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
关于JavaScript中原型继承中的一点思考
2012/07/25 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
2016/09/08 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
vue框架搭建之axios使用教程
2018/07/11 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python3访问sina首页中文的处理方法
2014/02/24 Python
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
python将unicode和str互相转化的实现
2020/05/11 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
python raise的基本使用
2020/09/10 Python
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
装修五一活动策划案
2014/01/23 职场文书
座谈会主持词
2014/03/20 职场文书
大学社团招新的通讯稿
2014/09/10 职场文书
环卫工作个人总结
2015/03/04 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
致运动员的广播稿
2015/08/19 职场文书
初二物理教学反思
2016/02/19 职场文书
JavaScript实现登录窗体
2021/06/22 Javascript
SQL Server实现分页方法介绍
2022/03/16 SQL Server