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 相关文章推荐
tornado框架blog模块分析与使用
Nov 21 Python
部署Python的框架下的web app的详细教程
Apr 30 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
Python实现针对给定单链表删除指定节点的方法
Apr 12 Python
python画一个玫瑰和一个爱心
Aug 18 Python
对python过滤器和lambda函数的用法详解
Jan 21 Python
Python列表的切片实例讲解
Aug 20 Python
Python将字典转换为XML的方法
Aug 01 Python
Python实现异步IO的示例
Nov 05 Python
python基于opencv实现人脸识别
Jan 04 Python
Python包管理工具pip的15 个使用小技巧
May 17 Python
Python数组变形的几种实现方法
May 30 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
54个提高PHP程序运行效率的方法
2015/07/19 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
数据结构之利用PHP实现二分搜索树
2020/10/25 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
JS画线(实例代码)
2013/11/20 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
jquery easyui使用心得
2014/07/07 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
Python实现读取文件最后n行的方法
2017/02/23 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
Python拼接字符串的7种方法总结
2018/11/01 Python
python实现的生成word文档功能示例
2019/08/23 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
用C语言实现文件读写操作
2013/10/27 面试题
办公室内勤岗位职责范本
2013/12/09 职场文书
生产部经理岗位职责
2013/12/16 职场文书
《落花生》教学反思
2014/02/25 职场文书
教育实习指导教师评语
2014/12/31 职场文书
导游词之凤凰古城
2019/10/22 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
超详细Python解释器新手安装教程
2021/05/10 Python
MySQL数据库必备之条件查询语句
2021/10/15 MySQL
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js