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日志配置的更多相关文章

  1. 运维开发笔记整理-django日志配置

    运维开发笔记整理-django日志配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Django日志 Django使用python内建的logging模块打印日志,Pytho ...

  2. Django 日志配置

    Django日志处理 settings配置 ########### # LOGGING # ########### BASE_LOG_DIR = os.path.join(os.path.dirnam ...

  3. django-debug-toolbar和Django 日志配置

    django-debug-toolbar介绍 django-debug-toolbar 是一组可配置的面板,可显示有关当前请求/响应的各种调试信息,并在单击时显示有关面板内容的更多详细信息. gith ...

  4. 八.django日志配置

    Django 日志 Django 使用Python 内建的logging 模块打印日志,Python 的logging 配置由四个部分组成: 记录器 —— Logger 处理程序 —— Handler ...

  5. Django 日志配置按日期滚动

    记录下Django关于日期的配置,以及如何根据日期滚动切割日志的问题. 配置的源码在githun上 https://github.com/blackmatrix7/django-examples/tr ...

  6. 第五天.权限批量录入/更新、信号、Django日志配置

    1. 角色.菜单.权限的增删该查 1. ModelForm增删改查 2. 增加和编辑使用同一个视图函数 Form() 1. 生成获取用户输入的标签 2. 对用户输入的内容做校验 3. 保留输入的内容同 ...

  7. django日志配置

    直接参考这篇,很详细:https://www.cnblogs.com/changqing8023/p/9639769.html 补充一点:日志文件打开时,中文乱码,要在handler中设置编码格式,' ...

  8. 第十三篇Django Logging配置样例

    第十三篇Django Logging配置样例 阅读目录(Content) Django 日志配置模板 官方链接 Django Logging Django 日志配置模板 LOGGING = { 've ...

  9. django 1.8 日志配置

    django 1.8 日志配置 以下为setings配置logging代码片段 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_ ...

随机推荐

  1. java中异常的处理

    异常分为运行时的异常和检测异常: java提供了两种异常机制.一种是运行时异常(RuntimeExepction),一种是检查式异常(checked execption). 运行时的异常就是在java ...

  2. Vue.js 条件渲染 v-if、v-show、v-else

    v-if  v-if 完全根据表达式的值在DOM中生成或移除一个元素.如果v-if表达式赋值为false,那么对应的元素就会从DOM中移除:否则,对应元素的一个克隆将被重新插入DOM中. 1 2 3 ...

  3. bind()函数的深入理解及两种兼容方法分析

    在JavaScript中,bind()函数仅在IE9+.Firefox4+.Chrome.Safari5.1+可得到原生支持.本文将深入探讨bind()函数并对两种兼容方法进行分析比较.由于本文将反复 ...

  4. Leetcode 1. 两数之和 (Python版)

    有粉丝说我一个学算法的不去做Leetcode是不是浪费,于是今天闲来没事想尝试一下Leetcode,结果果断翻车,第一题没看懂,一直当我看到所有答案的开头都一样的时候,我意识到了我是个铁憨憨,人家是让 ...

  5. 图论--网络流--最大流 HDU 3572 Task Schedule(限流建图,超级源汇)

    Problem Description Our geometry princess XMM has stoped her study in computational geometry to conc ...

  6. andorid jar/库源码解析之错误提示

    目录:andorid jar/库源码解析 错误: 错误1: Error: Static interface methods are only supported starting with Andro ...

  7. 2019-2020Nowcoder Girl初赛 题解

    题目都不是很难,就是最后一题有点毒瘤 第一题:牛妹爱整除 这个你把一个进制数进行拆分,拆分成若干位,然后在取模,这样会发现如果是x进制的数,那么对x+1这个进制转化即满足条件. 举个例子:一个x进制数 ...

  8. 线段树 区间加 gcd 差分 小阳的贝壳

    小阳的贝壳 如果线段树要维护区间gcd 这个很简单,但是如果有了区间加,维护gcd 就比较麻烦了. 这个首先可以证明的是 gcd(x,y,z)=gcd(x,y-x,z-y)   这个可以推到 n 个 ...

  9. 201771030117-祁甜 实验一 软件工程准备—<阅读《现代软件工程——构建之法》提出的三个问题>

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 这个作业要求链接 https://www.cnblogs.com/nwnu- ...

  10. 51单片机putchar函数的说明

    原文排版远些乱,整理了一下. #include <reg51.h> #define XON 0x11 /*串口流控制符 启动*/ #define XOFF 0x13 /*串口流控制符 中断 ...