zoukankan      html  css  js  c++  java
  • Django Logging

    Django Logging

    组成部分

      Loggers

      Handlers

      Filters

      Formatters

    Loggers

      loggers是记录系统的入口。他具有日志级别,定义的日志级别如下

        DEBUG:用于调试目的的低级系统信息

        INFO: 一般系统信息

        WARNING: 警告信息

        ERROR:错误信息

        CRITICAL:关键错误信息

        NOTEST: 记录所有

      写入logger的每条消息都是日志记录。每个日志记录还具有一个日志级别,表示该消息的严重性。日志记录还可以包含描述正在记录会见的有用元数据。这可以包括诸如堆栈跟踪或错误代码之类的详细信息。

      如果消息日志级别达到或超过loggers本身的日志级别,则进行下一步处理,如果没有,则忽略。

      一旦记录器确定需要处理消息,他就会传递给Handler。

    Handler

      Handler是负责进行处理。例如将消息写入屏幕,文件或者socket。

      Handler也具有日志级别,如果未达到Handeler的日志级别,则忽略

      loggers可以有多个Handler,可以定义不同的日志级别。

    Filters

      Filters用于提供对从loggers到Handler的日志记录传递的额外控制。

      默认情况下,处理所有满足日志级别要求的任何日志消息。也可以自定义其他条件

    Formatters

      格式化输出。格式化程序通常由包含LogRecord属性的Python格式化字符串组成

    配置日志记录

      默认情况下Django使用dictConfig格式,配置日志记录。

      参考网址

        https://docs.python.org/3/library/logging.handlers.html

      dictConfig必填

        version 目前唯一有效的值为1

       其他都是可选的

      如果dictConfig中disable_existing_loggersLOGGING设置为True(默认值),则将禁用默认配置中的所有记录器。已禁用的记录器与已删除的记录器不同; 记录器仍然存在,但会默默地丢弃记录到它的任何内容,甚至不会将条目传播到父记录器。因此你应该非常小心使用它可能不是你想要的。相反,您可以设置和重新定义的部分或全部的默认记录器; 或者您可以设置 处理日志记录配置己'disable_existing_loggers': Truedisable_existing_loggersFalseLOGGING_CONFIGNone

      示例文件

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'file': {
                'level': 'DEBUG',
                'class': 'logging.FileHandler',
                'filename': '/path/to/django/debug.log',
            },
        },
        'loggers': {
            'django': {
                'handlers': ['file'],
                'level': 'DEBUG',
                'propagate': True,
            },
        },
    }

       

    logging.FileHandler 发送日志输出到磁盘文件
    logging.StreamHandler  发送日志输出sys.stdout的sys.stderr或任何类文件对象
    logging.NullHandler  不做任何输出
    propagate 向上级传递
    logging.handlers.RotatingFileHandler 根据日志大小进行日志轮询


    代码中打印日志
    import logging
    logger = logging.getLogger("django")
    logger.info("hello word!")


     打印日志输出到屏幕

    import os
    
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console': {
                'class': 'logging.StreamHandler',
            },
        },
        'loggers': {
            'django': {
                'handlers': ['console'],
                'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
            },
        },
    }

    复杂的日志格式

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'verbose': {
                'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
            },
            'simple': {
                'format': '%(levelname)s %(message)s'
            },
        },
        'filters': {
            'special': {
                '()': 'project.logging.SpecialFilter',
                'foo': 'bar',
            },
            'require_debug_true': {
                '()': 'django.utils.log.RequireDebugTrue',
            },
        },
        'handlers': {
            'console': {
                'level': 'INFO',
                'filters': ['require_debug_true'],
                'class': 'logging.StreamHandler',
                'formatter': 'simple'
            },
            'mail_admins': {
                'level': 'ERROR',
                'class': 'django.utils.log.AdminEmailHandler',
                'filters': ['special']
            }
        },
        'loggers': {
            'django': {
                'handlers': ['console'],
                'propagate': True,
            },
            'django.request': {
                'handlers': ['mail_admins'],
                'level': 'ERROR',
                'propagate': False,
            },
            'myproject.custom': {
                'handlers': ['console', 'mail_admins'],
                'level': 'INFO',
                'filters': ['special']
            }
        }
    }

      

      

  • 相关阅读:
    实现随机颜色
    为网站实现一个验证码
    vue.js帐号,密码,邮箱和移动手机号码正则验证
    从网址中截去主机名和参数
    vue.js判断网址参数是否有效
    创建windows service
    vue.js axios call api example
    vue.js mouse over change the image
    jQuery接收url的参数
    ms sql server排序
  • 原文地址:https://www.cnblogs.com/lfdblog/p/10033403.html
Copyright © 2011-2022 走看看