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程序与C程序的结合使用
Apr 07 Python
Python实现统计文本文件字数的方法
May 05 Python
python线程池(threadpool)模块使用笔记详解
Nov 17 Python
微信跳一跳python代码实现
Jan 05 Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 Python
Python数据类型之Dict字典实例详解
May 07 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
Pytorch 实现冻结指定卷积层的参数
Jan 06 Python
Python虚拟环境venv用法详解
May 25 Python
浅谈python处理json和redis hash的坑
Jul 16 Python
python如何运行js语句
Sep 09 Python
Python利用机器学习算法实现垃圾邮件的识别
Jun 28 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的实现代码
2010/06/20 PHP
基于simple_html_dom的使用小结
2013/07/01 PHP
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
[45:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第二场 6.2
2018/06/04 DOTA
Python 第一步 hello world
2009/09/25 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
django富文本编辑器的实现示例
2019/04/10 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
Python爬虫与反爬虫大战
2020/07/30 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
荷兰家电销售网站:Welhof
2020/12/08 全球购物
临床医学大学生求职信
2013/09/28 职场文书
客服专员岗位职责
2014/02/28 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
首次购房证明
2015/06/19 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
以下牛机,你有几个
2022/04/05 无线电
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS