日志

07.django日志配置

 来源    2020-05-23    0  

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
相关文章
Django 日志配置按日期滚动
日志记录下Django关于日期的配置,以及如何根据日期滚动切割日志的问题. 配置的源码在githun上 https://github.com/blackmatrix7/django-examples/tr ...
Django日志配置
日志在setting里加入如下配置,然后在代码中用就好了,至于为什么,看官网文档,这里的代码只是一个典型的配置 # 自定义日志输出信息 LOGGING = { 'version': 1, 'disable ...
运维开发笔记整理-django日志配置
日志运维开发笔记整理-django日志配置 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Django日志 Django使用python内建的logging模块打印日志,Pyth ...
07 Django之配置静态文件以及渲染图片
日志js,css,img等都叫做静态文件,那么关于django中静态文件的配置,我们就需要在setting配置文件里面写上下面这些内容: #STATIC_URL = '/xxx/' #别名,随便写的名字, ...
django 1.8 日志配置
日志django 1.8 日志配置 以下为setings配置logging代码片段 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_ ...
1
如何配置我的Django日志以像内置的开发服务器日志一样运行?
问答我正在尝试在settings.py中配置我的日志记录配置,并且有很多选项,我无法复制内置开发服务器日志(打印到控制台). 我希望我的生产日志记录通常在开发服务器日志中打印到控制台的相同信息(GET请求 ...
如何在gunicorn服务器下为生产配置django日志记录?
问答我已设置此日志记录配置: LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'filters': { 'require_debu ...
1
如何使用Django 1.3日志字典配置设置SysLogHandler
问答我没有运气找到有关使用Django 1.3字典配置设置syslog日志记录的任何信息. Django文档不包括syslog,而python文档不太清楚,并不涵盖字典配置.我已经开始执行以下操作了,但我 ...
1
django 自定义日志配置
日志如果不想使用 python 的 dictConfig 格式来配置 logger,可以制定自己的配置架构. LOGGING_CONFIG 配置定义了用来配置 django logger 的可调用函数,默 ...
django 日志logging的配置以及处理
日志日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常.在生产环境下有很大的用途.在Java开发中通常用log4j,logback等第三方组件.那么在django中是怎么处理日志 ...
django 完整日志配置
日志django中的log需要在settings.py中配置 import time cur_path = os.path.dirname(os.path.realpath(__file__)) # lo ...
Django - 日志工作中常用配置
日志工作中常用配置 # 日志配置 BASE_LOG_DIR = os.path.join(BASE_DIR, "log") LOGGING = { 'version': 1, # 保留 ...
django中日志配置
日志# ======日志配置====== # 错误优先级:NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL # Djang ...
1
django – 如何配置S3BotoStorage或收藏上载到s3 bucket子目录
问答有没有办法配置django的collectstatic命令上传到s3桶中的子目录,而不仅仅是顶级目录? 谢谢::如果您使用django-storages中的S3BotoStorage引擎,则会有一个名 ...
1
mysql – MariaDB – 错误日志配置?
问答我在Debian 7中有MariaDB,想知道为什么mysql会突然停止.我应该编辑my.cnf并定义错误日志文件的路径. 根据this,我应该在[mysqld_safe]和[mysqld]下面添加l ...
Django日志和错误的位置
问答我已经用nginx设置了django服务器,并且在某些页面中出现403错误. 在哪里可以找到django日志?在哪里可以看到错误的细节?::Logs设置在您的settings.py文件中.一个新的默认 ...
1
python – 在自定义Django日志记录处理程序中检索请求对象
问答我有一个自定义日志处理程序,我想处理所有日志消息级别(INFO,WARN,DEBUG,ERROR等)并将其发送到数据分析服务器.对于每条消息,数据将包括记录和原始请求对象上的字段. 问题是我没有看到附 ...
1
python – 确定完整的Django url配置
问答有没有办法获得完整的django url配置? 例如Django的调试404页面不显示包含的url配置,所以这不是完整的配置. 答:感谢Alasdair,这里是一个示例脚本: import urls ...
1
Django 1.3日志记录:不记录500个错误
问答我正在努力使'django.request'记录器按照广告的方式工作 – 500个错误似乎不会传播到附加到的处理程序. 在每个新项目的默认日志记录配置中,注释说"通过此配置执行的日志记录是在 ...
1