07.django日志配置
https://docs.djangoproject.com/en/3.0/topics/logging/
https://yiyibooks.cn/xx/python_352/library/logging.html#logger-objects
https://docs.python.org/3/library/logging.html#logrecord-attributes
https://yiyibooks.cn/xx/python_352/library/logging.handlers.html
- logger 记录器,所有日志都要经过的入口
- handler 处理器,接收 logger 的日志,决定 log 是打印的目的,是文件、屏幕,还是其他地方,比如邮件 ELK
- filter 过滤器,过滤你想要的日志(不用)
- formatter 格式化,格式化 handler 的日志格式
一.logger 日志级别
| 级别 | 值 | 描述 |
|---|---|---|
| CRITICAL | 50 | 关键错误、消息 |
| ERROR | 40 | 错误 |
| WARNING | 30 | 警告 |
| INFO | 20 | 通知消息 |
| DEBUG | 10 | 调试 |
| NOTSET | 0 | 无级别 |
二.logger 配置
- logger
'loggers': {
'log名称':{
'handlers': ['处理器名称1',,'处理器名称2'],
'level': '日志级别',
'propagate': False,
},
- handlers
'handlers名称': {
'level': '日志级别',
'class': 'handlers类',
'filename': '文件全路径',
'when': "D",
'interval': 1,
'formatter': 'formatter名称'
},
- formatter
"formatter名称": {
"format": '%(asctime)s %(name)s %(levelname)s %(pathname)s:%(lineno)d %(module)s:%(funcName)s %(message)s',
"datefmt": "%Y-%m-%d %H:%M:%S"
},
- format 日志消息格式
| 格式 | 描述 |
|---|---|
| %(name)s | 记录器 logger 的名字 |
| %(levelno)s | 数据形式的日志记录级别 |
| %(levelname)s | 文本形式的日志记录级别 |
| %(filename)s | 执行日志记录调用的源文件的文件名 |
| %(pathname)s | 执行日志记录调用的源文件的 全路径+文件名 |
| %(funcName)s | 执行日志记录调用的函数名称 |
| %(module)s | 调用的模块名称,django是 app 的名称 |
| %(lineno)d | 记录调用的行号 |
| %(created)s | 执行日志记录的时间 |
| %(asctime)s | 日期时间 |
| %(msecs)s | 毫秒部分 |
| %(thread)s | 线程ID |
| %(threadName)s | 线程名称 |
| %(process)d | 进程ID |
| %(message)s | 记录的消息,自定义内容 |
- 按时间轮转的参数
https://docs.python.org/3/library/logging.handlers.html#timedrotatingfilehandler
| 格式 | 描述 |
|---|---|
| 'S' | Seconds |
| 'M' | Minutes |
| 'H' | Hours |
| 'D' | Days |
| 'W0' - 'W6' | Weekday (0=Monday) |
| 'midnight' | Roll over at midnight |
三.使用
- 3.1 定义一个 logger
'loggers': {
'mylogger':{
'handlers': ['console'],
'level': 'DEBUG'
},
- 3.2 配置 handler
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',# 写到屏幕
'formatter': 'simple'
},
- 3.3 某个 view 使用这个 logger
import logging
logger = logging.getLogger('mylogger')
- 3.4 视图内使用自定义输出级别和内容
logger.debug('视图的debuglog')
- 3.5 增加一个文件 handler
'file': {
'level' :'DEBUG',
'class': 'logging.FileHandler',
'filename': '/tmp/debug.log',
'formatter': 'simple',
}
- 3.6 logger 中使用多个 handler, 关闭向上传播
'mylogger':{
'handlers': ['console','file'],
'level': 'DEBUG',
'propagate': False,
},
- 3.7 输出
DEBUG DEBUG 日志
ERROR ERROR 日志
DEBUG debug log
ERROR error log
System check identified no issues (0 silenced).
May 22, 2020 - 08:16:34
Django version 3.0.6, using settings 'ops.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
DEBUG 视图的debuglog
/tmp/debug.log 也会有这个日志
四.定义一个日志输出格式,并使用
"default": {
"format": '%(asctime)s %(pathname)s:%(lineno)d %(module)s:%(funcName)s '
'%(levelname)s- %(message)s',
"datefmt": "%Y-%m-%d %H:%M:%S"
},
- 输出
2020-05-22 08:31:46 /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:20 views:get DEBUG- 视图的debuglog
五. 定义django log,不同模块分开存放到不同文件,关闭向上传播,自定义的内容在最上级日志器记录中
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
'style': '{',
},
'simple': {
'format': '{levelname} {message}',
'style': '{',
},
"default": {
"format": '%(asctime)s %(name)s %(pathname)s:%(lineno)d %(module)s:%(funcName)s '
'%(levelname)s- %(message)s',
"datefmt": "%Y-%m-%d %H:%M:%S"
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'default'
},
'file': {
'level': 'DEBUG',
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': '/tmp/debug.log',
'when': "D",
'interval': 1,
'formatter': 'default'
},
"request": {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/tmp/request.log',
'formatter': 'default'
},
"server": {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/tmp/server.log',
'formatter': 'default'
},
"root": {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/tmp/root.log',
'formatter': 'default'
},
"db_backends": {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/tmp/db_backends.log',
'formatter': 'default'
},
"autoreload": {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': '/tmp/autoreload.log',
'formatter': 'default'
}
},
'loggers': {
'mylogger':{
'level': 'DEBUG',
'handlers': ['console','file'],
'propagate': True,
},
"django": {
"level": "DEBUG",
"handlers": ["console", "file"],
'propagate': False,
},
"django.request": {
"level": "DEBUG",
"handlers": ["request"],
'propagate': False,
},
"django.server": {
"level": "DEBUG",
"handlers": ["server"],
'propagate': False,
},
"django.db.backends": {
"level": "DEBUG",
"handlers": ["db_backends"],
'propagate': False,
},
"django.utils.autoreload": {
"level": "INFO",
"handlers": ["autoreload"],
'propagate': False,
}
},
'root': {
"level": "DEBUG",
"handlers": ["root"],
}
}
输出
-rw-r--r-- 1 jenvid docker 0 5月 22 15:47 request.log
-rw-r--r-- 1 jenvid docker 81K 5月 23 12:57 debug.log.2020-05-23_04-57
-rw-r--r-- 1 jenvid docker 1.9K 5月 23 13:21 autoreload.log
-rw-r--r-- 1 jenvid docker 9.4K 5月 23 13:21 db_backends.log
-rw-r--r-- 1 jenvid docker 9.1K 5月 23 13:21 server.log
-rw-r--r-- 1 jenvid docker 1.5K 5月 23 13:21 root.log
-rw-r--r-- 1 jenvid docker 632 5月 23 13:21 debug.log
cat root.log
2020-05-22 10:20:25 mylogger /home/jenvid/PycharmProjects/django/ops/apps/idcs/views.py:13 views:<module> DEBUG- DEBUG 日志
2020-05-22 10:20:25 mylogger /home/jenvid/PycharmProjects/django/ops/apps/idcs/views.py:14 views:<module> ERROR- ERROR 日志
2020-05-22 10:20:25 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:13 views:<module> DEBUG- debug log
2020-05-22 10:20:25 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:14 views:<module> ERROR- error log
2020-05-22 10:20:30 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:20 views:get DEBUG- 视图的debuglog
2020-05-23 04:57:57 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:20 views:get DEBUG- 视图的debuglog
2020-05-23 05:21:39 asyncio /usr/lib/python3.7/asyncio/selector_events.py:53 selector_events:__init__ DEBUG- Using selector: EpollSelector
2020-05-23 05:21:40 mylogger /home/jenvid/PycharmProjects/django/ops/apps/idcs/views.py:13 views:<module> DEBUG- DEBUG 日志
2020-05-23 05:21:40 mylogger /home/jenvid/PycharmProjects/django/ops/apps/idcs/views.py:14 views:<module> ERROR- ERROR 日志
2020-05-23 05:21:40 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:13 views:<module> DEBUG- debug log
2020-05-23 05:21:40 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:14 views:<module> ERROR- error log
2020-05-23 05:21:44 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:20 views:get DEBUG- 视图的debuglog
07.django日志配置的更多相关文章
- 运维开发笔记整理-django日志配置
运维开发笔记整理-django日志配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Django日志 Django使用python内建的logging模块打印日志,Pytho ...
- Django 日志配置
Django日志处理 settings配置 ########### # LOGGING # ########### BASE_LOG_DIR = os.path.join(os.path.dirnam ...
- django-debug-toolbar和Django 日志配置
django-debug-toolbar介绍 django-debug-toolbar 是一组可配置的面板,可显示有关当前请求/响应的各种调试信息,并在单击时显示有关面板内容的更多详细信息. gith ...
- 八.django日志配置
Django 日志 Django 使用Python 内建的logging 模块打印日志,Python 的logging 配置由四个部分组成: 记录器 —— Logger 处理程序 —— Handler ...
- Django 日志配置按日期滚动
记录下Django关于日期的配置,以及如何根据日期滚动切割日志的问题. 配置的源码在githun上 https://github.com/blackmatrix7/django-examples/tr ...
- 第五天.权限批量录入/更新、信号、Django日志配置
1. 角色.菜单.权限的增删该查 1. ModelForm增删改查 2. 增加和编辑使用同一个视图函数 Form() 1. 生成获取用户输入的标签 2. 对用户输入的内容做校验 3. 保留输入的内容同 ...
- django日志配置
直接参考这篇,很详细:https://www.cnblogs.com/changqing8023/p/9639769.html 补充一点:日志文件打开时,中文乱码,要在handler中设置编码格式,' ...
- 第十三篇Django Logging配置样例
第十三篇Django Logging配置样例 阅读目录(Content) Django 日志配置模板 官方链接 Django Logging Django 日志配置模板 LOGGING = { 've ...
- django 1.8 日志配置
django 1.8 日志配置 以下为setings配置logging代码片段 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_ ...
随机推荐
- 通过transmittable-thread-local源码理解线程池线程本地变量传递的原理
前提 最近一两个月花了很大的功夫做UCloud服务和中间件迁移到阿里云的工作,没什么空闲时间撸文.想起很早之前写过ThreadLocal的源码分析相关文章,里面提到了ThreadLocal存在一个不能 ...
- 标准库os
os模块 提供对操作系统进行调用的接口 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 os ...
- Redis(四):独立功能的实现
发布与订阅 Redis 的发布与订阅功能有PUBLISH命令,SUBSCRIBE命令,PSUBSCRIBE命令,PUBSUB命令等组成. 客户端可以通过SUBSCRIBE命令订阅一个或多个频道,当其它 ...
- 蓝色展开收缩悬浮QQ客服代码
放在我的博客首页上的的预览图: 在文章区的预览图如下: 代码如下: <div class="scrollsidebar" id="scrollsidebar&quo ...
- 从零开始通过webhooks实现前端自动化
1. 前置条件 有一台自己的服务器.比如阿里云,腾讯云之类 有远程仓库能够push代码,pull代码.比如github,或者码云 远程仓库有webhooks功能 2. 自动化部署流程 3. 构建流程 ...
- java的++i和i++的分析
关于自增自减,先来一道题,大家尝试着做一下: public static void main(String[] args) { int a=2; int b=a++; int c=--a; Syste ...
- WCF学习(二)
WCF通道模型 绑定的本质是一个配置好的通道栈,为了方便程序员专著与业务逻辑,WCF提高了一系列常用绑定.随后会有相应的自定义通道栈代码 无论交互的另一方具体位置在哪里,WCF都会为消息的发送和接收建 ...
- mysql优化–explain分析sql语句执行效率
Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优 ...
- python执行脚本报错: Non-ASCII character '\xe4' in file yang.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
这是因为我们在写python程序的时候,无论在注释里面出现中文,还是在代码里面出现中文,也就是说只要这个python程序里面有中文,我们就不能直接用python2来进行执行,如果安装是python3可 ...
- ARM-Linux Gcc 交叉编译环境搭建
1 NFS网络文件系统搭建 测试宿主机与目标板ping通 目标板上某个文件夹(例如mnt)挂载到宿主机(192.168.1.111)的/home/nfs_dir文件夹下 mount –t nfs –o ...