django 日志logging的配置以及处理
django日志官方文档https://docs.djangoproject.com/en/1.11/topics/logging/
本文摘自http://davidbj.blog.51cto.com/4159484/1433741
日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常。在生产环境下有很大的用途。在Java开发中通常用log4j,logback等第三方组件。那么在django中是怎么处理日志?django利用的就是Python提供的logging模块,但django中要用logging,还得有一定的配置规则,需要在setting中设置。
logging模块
logging模块为应用程序提供了灵活的手段记录事件、错误、警告和调试信息。对这些信息可以进行收集、筛选、写入文件、发送给系统日志等操作,甚至还可以通过网络发送给远程计算机。
> 日志记录级别
logging模块的重点在于生成和处理日志消息。每条消息由一些文本和指示其严重性的相关级别组成。级别包含符号名称和数字值。
| 级别 | 值 | 描述 |
| CRITICAL | 50 | 关键错误/消息 |
| ERROR | 40 | 错误 |
| WARNING | 30 | 警告消息 |
| INFO | 20 | 通知消息 |
| DEBUG | 10 | 调试 |
| NOTSET | 0 | 无级别 |
> 记录器
记录器负责管理日志消息的默认行为,包括日志记录级别、输出目标位置、消息格式以及其它基本细节。
| 关键字参数 | 描述 |
| filename | 将日志消息附加到指定文件名的文件 |
| filemode | 指定用于打开文件模式 |
| format | 用于生成日志消息的格式字符串 |
| datefmt | 用于输出日期和时间的格式字符串 |
| level | 设置记录器的级别 |
| stream | 提供打开的文件,用于把日志消息发送到文件。 |
>format 日志消息格式
| 格式 | 描述 |
| %(name)s | 记录器的名称 |
| %(levelno)s | 数字形式的日志记录级别 |
| %(levelname)s | 日志记录级别的文本名称 |
| %(filename)s | 执行日志记录调用的源文件的文件名称 |
| %(pathname)s | 执行日志记录调用的源文件的路径名称 |
| %(funcName)s | 执行日志记录调用的函数名称 |
| %(module)s | 执行日志记录调用的模块名称 |
| %(lineno)s |
执行日志记录调用的行号 |
| %(created)s | 执行日志记录的时间 |
| %(asctime)s | 日期和时间 |
| %(msecs)s | 毫秒部分 |
| %(thread)d | 线程ID |
| %(threadName)s | 线程名称 |
| %(process)d | 进程ID |
| %(message)s | 记录的消息 |
> 内置处理器
logging模块提供了一些处理器,可以通过各种方式处理日志消息。使用addHandler()方法将这些处理器添加给Logger对象。另外还可以为每个处理器配置它自己的筛选和级别。
handlers.DatagramHandler(host,port):发送日志消息给位于制定host和port上的UDP服务器。
handlers.FileHandler(filename):将日志消息写入文件filename。
handlers.HTTPHandler(host, url):使用HTTP的GET或POST方法将日志消息上传到一台HTTP 服务器。
handlers.RotatingFileHandler(filename):将日志消息写入文件filename。如果文件的大小超出maxBytes制定的值,那么它将被备份为filename1。
由于内置处理器还有很多,如果想更深入了解。可以查看官方手册。
2.django 使用logging记录日志
现在大概了解了logging的使用方法,现在可以结合django使用。
> 配置setting.py配置文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#导入模块import loggingimport django.utils.logimport logging.handlersLOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 'standard': { 'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'} #日志格式 }, 'filters': { }, 'handlers': { 'mail_admins': { 'level': 'ERROR', 'class': 'django.utils.log.AdminEmailHandler', 'include_html': True, }, 'default': { 'level':'DEBUG', 'class':'logging.handlers.RotatingFileHandler', 'filename': '/sourceDns/log/all.log', #日志输出文件 'maxBytes': 1024*1024*5, #文件大小 'backupCount': 5, #备份份数 'formatter':'standard', #使用哪种formatters日志格式 }, 'error': { 'level':'ERROR', 'class':'logging.handlers.RotatingFileHandler', 'filename': '/sourceDns/log/error.log', 'maxBytes':1024*1024*5, 'backupCount': 5, 'formatter':'standard', }, 'console':{ 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'standard' }, 'request_handler': { 'level':'DEBUG', 'class':'logging.handlers.RotatingFileHandler', 'filename': '/sourceDns/log/script.log', 'maxBytes': 1024*1024*5, 'backupCount': 5, 'formatter':'standard', }, 'scprits_handler': { 'level':'DEBUG', 'class':'logging.handlers.RotatingFileHandler', 'filename':'/sourceDns/log/script.log', 'maxBytes': 1024*1024*5, 'backupCount': 5, 'formatter':'standard', } }, 'loggers': { 'django': { 'handlers': ['default', 'console'], 'level': 'DEBUG', 'propagate': False }, 'django.request': { 'handlers': ['request_handler'], 'level': 'DEBUG', 'propagate': False, }, 'scripts': { 'handlers': ['scprits_handler'], 'level': 'INFO', 'propagate': False }, 'sourceDns.webdns.views': { 'handlers': ['default', 'error'], 'level': 'DEBUG', 'propagate': True }, 'sourceDns.webdns.util':{ 'handlers': ['error'], 'level': 'ERROR', 'propagate': True } } } |
解析:
1.formatters:配置打印日志格式
2.handler:用来定义具体处理日志的方式,可以定义多种,"default"就是默认方式,"console"就是打印到控制台方式。
3.loggers:用来配置用那种handlers来处理日志,比如你同时需要输出日志到文件、控制台。
注意:
1.loggers类型为"django"这将处理所有类型日志。
2.sourceDns.webdns.views 应用的py文件
> views.py代码配置
|
1
2
3
4
5
6
|
logger = logging.getLogger('sourceDns.webdns.views') #刚才在setting.py中配置的loggertry: mysql= connectMysql('127.0.0.1', '3306', 'david')except Exception,e: logger.error(e) #直接将错误写入到日志文件 |
在blog项目配了一个日志配置
# 日志配置 todo 文件路径上线需改
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '[%(asctime)s] [%(levelname)s] %(message)s',
},
# 以下定时任务错误日志控制台打印格式配置
'command_error_console_formatter': {
'format': '[%(levelname)s] [%(filename)s-%(funcName)s-%(name)s:%(lineno)d] <%(message)s>',
},
# 以下定时任务错误日志文件记录格式配置
'command_error_file_formatter': {
'format': '[%(levelname)s] (%(asctime)s) %(process)d [%(threadName)s:%(thread)d] <%(message)s>',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
'django_request_console': {
'class': 'logging.StreamHandler',
},
# 以下HTTP请求错误日志文件配置,,每1天做一次日志文件分割,备份数量为50条日志(django_request最多保存50条日志,否则做日志切割)
'django_request_file': {
'level': 'WARNING',
'class':'logging.handlers.TimedRotatingFileHandler',
# 'filename': '/home/a/logs/django_request.log',
'filename':'server/local_logs/django_request/django_request',
'when': 'D', # 日志分割周期单位为天
'interval':1, # 分割周期为1天
'backupCount':50,
# 备份数量为50条日志记录,当使用时间分割日志时,又有backupCount时,
# 只有当备份日志django_request日志数量达到50条时才会做日志切割,
# 若想严格按时间切割日志,则backupCount不要配置!!!!
'formatter': 'verbose',
},
# 以下定时任务错误日志控制台打印配置
'command_error_console': {
'level': 'ERROR',
'class': 'logging.StreamHandler',
'formatter': 'command_error_console_formatter',
},
# 以下定时任务错误日志文件配置,每1周做一次日志文件分割,备份数量为50条日志
'command_error_file': {
'level': 'ERROR',
'class':'logging.handlers.TimedRotatingFileHandler',
# 'filename': '/home/a/logs/command_error.log',
'filename': 'server/local_logs/command_error/command_error',
'when': 'D',
'interval':7,
'backupCount':50,
'formatter': 'command_error_file_formatter',
},
# 以下定时任务执行成功日志文件配置,每1周做一次日志文件分割,备份数量为50条日志
'command_success_file': {
'level': 'INFO',
'class':'logging.handlers.TimedRotatingFileHandler',
# 'filename': '/home/a/logs/command_success.log',
'filename': 'server/local_logs/command_success/command_success',
'when': 'D',
'interval':7,
'backupCount':50,
'formatter': 'command_error_file_formatter',
},
},
'loggers': {
'django': {
'handlers': ['console'],
'propagate': True,
'level': 'INFO',
},
# HTTP请求日志。后端或前端的错误,出现status_code 5XX(error级别),4XX(warning级别)
'django.request': {
'handlers': ['django_request_file', 'django_request_console'],
'level': 'WARNING',
'propagate': True,
},
# 以下定时任务错误logger配置
'command_error': {
'handlers': ['command_error_console', 'command_error_file'],
'propagate': True,
'level': 'ERROR',
},
# 以下定时任务执行成功logger配置
'command_success': {
'handlers': ['command_success_file'],
'propagate': True,
'level': 'INFO',
},
},
}
复制代码
django 日志logging的配置以及处理的更多相关文章
- [转]django 日志logging的配置以及处理
http://davidbj.blog.51cto.com/4159484/1433741 日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常.在生产环境下有很大的用途.在J ...
- django/python日志logging 的配置以及处理
日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常.在生产环境下有很大的用处.在java 开发中通常用 log4j,logback 等三方组件.那么在 django中是怎么处 ...
- Django 日志配置
Django日志处理 settings配置 ########### # LOGGING # ########### BASE_LOG_DIR = os.path.join(os.path.dirnam ...
- python的日志模块:logging;django的日志系统;django日志输出时间修改
Django的log,主要是复用Python标准库中的logging模块,在settings.py中进行配置 源代码 1.__init__.py包含以下类: StreamHandler Formatt ...
- Django 日志配置按日期滚动
记录下Django关于日期的配置,以及如何根据日期滚动切割日志的问题. 配置的源码在githun上 https://github.com/blackmatrix7/django-examples/tr ...
- python3-开发进阶Django-debug-toolbar的配置和Django logging的配置
阅读目录 django-debug-toolbar的配置 Django logging的配置 一.django-debug-toolbar的配置 1.介绍 django-debug-toolbar 是 ...
- 运维开发笔记整理-django日志配置
运维开发笔记整理-django日志配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Django日志 Django使用python内建的logging模块打印日志,Pytho ...
- 八.django日志配置
Django 日志 Django 使用Python 内建的logging 模块打印日志,Python 的logging 配置由四个部分组成: 记录器 —— Logger 处理程序 —— Handler ...
- Django(37)配置django日志
前言 django框架的日志通过python内置的logging模块实现的,既可以记录自定义的一些信息描述,也可以记录系统运行中的一些对象数据,还可以记录包括堆栈跟踪.错误代码之类的详细信息. ...
随机推荐
- Docker Machine搭建并加入节点
对于集群服务器来讲,要在每台机器上手动安装Docker是一件及其痛苦的事情,还好有Docker Machine这一工具,Docker三剑客中的一角. 一.Docker Machine介绍 这个工具已经 ...
- Centos7+LVS-DR+keepalived实验(包含sorry-server、日志、及HTTP-GET的健康检测)
目录检索 一.简介 1.lvs-dr原理请参考原理篇 2.keepalived原理请参考原理篇 3.基于lvs-dr+keepalived故障切换架构图如下: 二.部署 1.环境 2.准备RS的web ...
- golang实现aes-cbc-256加密解密过程记录
我为什么吃撑了要实现go的aes-cbc-256加密解密功能? 之前的项目是用php实现的,现在准备用go重构,需要用到这个功能,这么常用的功能上网一搜一大把现成例子,于是基于go现有api分分钟实现 ...
- .NET知识体系(转载)
这篇文章为新手指明的学习方向: https://www.cnblogs.com/mcgrady/p/4725038.html 先生存后发展,先学会选择和使用知识和工具来做东西,然后在研究怎么做的再好一 ...
- PHPCMS V9 添加二级导航
今天看了看phpcms 写到二级导航时发现点问题,查询导航栏的信息时返回的$r[arrchildid]与自己想象的不符,文档上说是返回子栏目id但是却有些不同. 开始的思路: <ul class ...
- 《PHP制作个人博客》之四:分类添加及前端导航数据用php动态调取
大家好,今天我们接着上一节的全栈营销个人博客制作,上一节我们把博客的模板给加载运行起来.今天我们主要讲解后台模板分类的添加,后台导航的添加,及前台导航的动态调用.一个好的博客,导航很重要,导航就像你网 ...
- 实现DataTables搜索框查询结果高亮显示
DataTables是封装好的HTML表格插件,丰富了HTML表格的样式,提供了即时搜索.分页等多种表格高级功能.用户可以编写很少的代码(甚至只是使用官方的示例代码),做出一个漂亮的表格以展示数据.关 ...
- Snapde电子表格编写Exprtk脚本进行数据运算
Snapde,一个专门为编辑超大型数据量CSV文件而设计的单机版电子表格软件:它运行的速度非常快,反应非常灵敏. 一.打开文件:用Snapde打开需要运算的CSV文件 二.添加行列:在编辑菜单找到设置 ...
- arcgis api 3.x for js 之 echarts 开源 js 库实现地图统计图分析(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- 从0开始的Python学习019更多的Python内容2
书接上文,接演Python全传 话说学了这么多Python的基础知识,也该写一点让别人看不懂的代码了. lambda lambda表达式,是一个方法的简化形似,它没有自己的代码块,它后面的语句就是它的 ...