Django日志的配置
2024-09-05 01:04:24
做开发离不开日志,以下是我在工作中写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流示图
最新文章
- CSS之A标签
- Greenplum测试环境部署
- JavaScript学习12 JS中定义对象的几种方式
- atitit.提升备份文件复制速度(4) ---数据挖掘 获取回收站文件列表
- DevExpress XtraTreeList的复选框 禁用
- UnitTest
- Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面
- Metasploit介绍
- Python成长之路第二篇(1)_数据类型内置函数用法
- Python2.7 转义和正则匹配中文
- Caffe Ubuntu14.04 64位 的最快安装 (cuda7.5 + cudnn7.0 2016最新)
- GIT入门笔记(20)- git 开发提交代码过程梳理
- 使用Lottie将AE项目转换为 Web 原生动画
- 实现一个简单的WebSocket聊天室
- Navicat安装及简单使用
- Linux文件下载(转)
- SPARK共享变量:广播变量和累加器
- PyCharm引入python需要使用的包
- hbase基于solr配置二级索引
- C# 中out,ref,params参数的使用
热门文章
- JDK8~13新特性概览
- es分数_score衰减函数
- 11 Mysql之配置双主热备+keeepalived.md
- flat 的用法
- hive元数据库理解
- symfony3 使用命令行工具生成Entity实体所踩的坑
- Could not determine which “make” command to run. Check the “make” step in the build configuration
- Jmeter 常见逻辑控制器详解
- noi.ac NA531 【神树和物品】
- 各种环境下搭建ruby on rails开发环境