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中datetime常用时间处理方法
Jun 15 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
Python命名空间的本质和加载顺序
Dec 17 Python
Python使用APScheduler实现定时任务过程解析
Sep 11 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
python实现坦克大战
Apr 24 Python
python如何查看安装了的模块
Jun 23 Python
如何利用python检测图片是否包含二维码
Oct 15 Python
Python读写yaml文件
Mar 20 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过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
jQuery实现在列表的首行添加数据
2015/05/19 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
2016/12/19 Javascript
一次让你了解全部JavaScript的作用域
2019/06/24 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
小程序选项卡以及swiper套用(跨页面)
2020/06/19 Javascript
微信小程序中data-key属性之数据传输(经验总结)
2020/08/22 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
python中Genarator函数用法分析
2015/04/08 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
Python地图绘制实操详解
2019/03/04 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Python中私有属性的定义方式
2020/03/05 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
2020/08/07 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
证婚人搞笑证婚词
2014/01/10 职场文书
料理师求职信
2014/01/30 职场文书
社区服务标语
2014/07/01 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
给老师的一封感谢信
2015/01/20 职场文书
继续教育个人总结
2015/03/03 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技