做开发离不开日志,以下是我在工作中写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 * 50, # 日志大小 50M
'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,
},
'collect': { # 名为 'collect'的logger还单独处理
'handlers': ['console', 'collect'],
'level': 'INFO',
}
},
}
 

附:Python logger流示图

最新文章

  1. CSS之A标签
  2. Greenplum测试环境部署
  3. JavaScript学习12 JS中定义对象的几种方式
  4. atitit.提升备份文件复制速度(4) ---数据挖掘 获取回收站文件列表
  5. DevExpress XtraTreeList的复选框 禁用
  6. UnitTest
  7. Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面
  8. Metasploit介绍
  9. Python成长之路第二篇(1)_数据类型内置函数用法
  10. Python2.7 转义和正则匹配中文
  11. Caffe Ubuntu14.04 64位 的最快安装 (cuda7.5 + cudnn7.0 2016最新)
  12. GIT入门笔记(20)- git 开发提交代码过程梳理
  13. 使用Lottie将AE项目转换为 Web 原生动画
  14. 实现一个简单的WebSocket聊天室
  15. Navicat安装及简单使用
  16. Linux文件下载(转)
  17. SPARK共享变量:广播变量和累加器
  18. PyCharm引入python需要使用的包
  19. hbase基于solr配置二级索引
  20. C# 中out,ref,params参数的使用

热门文章

  1. JDK8~13新特性概览
  2. es分数_score衰减函数
  3. 11 Mysql之配置双主热备+keeepalived.md
  4. flat 的用法
  5. hive元数据库理解
  6. symfony3 使用命令行工具生成Entity实体所踩的坑
  7. Could not determine which “make” command to run. Check the “make” step in the build configuration
  8. Jmeter 常见逻辑控制器详解
  9. noi.ac NA531 【神树和物品】
  10. 各种环境下搭建ruby on rails开发环境