Django日志处理

作者: 仲冬初七 | 来源:发表于2018-06-20 22:32 被阅读2次

    日志处理

    日志级别
    • DEBUG:用于调试目的的低级系统信息
    • INFO:一般系统信息
    • WARNING:描述发生的小问题的信息。
    • ERROR:描述发生的主要问题的信息。
    • CRITICAL:描述发生的关键问题的信息

    选择低级别会默认包含自身级别以上的信息,但不会向下包含,即,选择了ERROR级别那么INFO, DEBUG等错误信息则会被忽略

    过滤器
    • Django只包含部分的错误信息处理,如果需要额外扩展自己的异常处理,则需要添加过滤器,并控制这些异常由那些方法进行处理

    如: 可以指定一个只允许处理ERROR级别发送的特定消息的过滤器,也可以指定过滤掉一些不必要的操作,像记录DEBUG日志

    格式化
    • 将错误信息以确切的格式进行描述写入到日志文件

    verbose对日志进行详细的记录

    'formatters': {
            # 详细的记录
            """
            levelname: 警告级别
            asctime: 发生时间
            module : 发生模块
            process : 进程信息
            thread : 线程信息
            message : 警告信息
            """
            'verbose': {
                'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
            }
    

    simple 简单的记录, 只输出警告级别和日志消息,也可以多指定

    开启日志记录
    import logging
    
    logger = logging.getLogger(__name__)
    
    def my_view(request, arg1, arg):
        ...
        if bad_mojo:
            # 记录到日志信息
            logger.error('这里出错了')
    
    
    手动调用日志处理记录
    • logger.debug()
    • logger.info()
    • logger.warning()
    • logger.error()
    • logger.critical()
    • logger.log()手动发出具有特定日志级别的日志消息
    • logger.exception()创建ERROR包装当前异常堆栈帧的级别日志消
    实例,在配置文件中配置日志操作
    LOGGING = {
        # 设置版本
        'version': 1,
        # 是否允许其他日志功能,Flase表示不禁用,禁用导致其他记录日志的功能将被阻止
        'disable_existing_loggers': False,
        # 格式化,日志输出格式
        'formatters': {
            # 详细
            'verbose': {
                'format': '%(levelname)s %(asctime)s %(module)s %(process)d  %(thread)d %(message)s'
            },
            # 简单,可以自己添加或减少,看需求
            'simple': {
                'format': '%(levelname)s %(module)s  %(message)s'
            },
        },
        # 过滤器,过滤掉debug级别的错误,原因:debuf会输出在控制台,没必要记录
        'filters': {
            'require_debug_true': {
                '()': 'django.utils.log.RequireDebugTrue',
            },
        },
        # 日志的处理方式
        'handlers': {
         # 将级别为DEBUG的错误以简单的形式输出在控制台
            'console': {
                'level': 'DEBUG',
                'filters': ['require_debug_true'],
                'class': 'logging.StreamHandler',
                'formatter': 'simple'
            },
            # 将INFO级别及以上的错误储存在文件中
            'file': {
                'level': 'INFO',
                'class': 'logging.handlers.RotatingFileHandler',
                # 日志文件的位置
                'filename':
                os.path.join(os.path.dirname(BASE_DIR), "logs/meiduo.log"),  
                # 单个文件大小 300M
                'maxBytes': 300 * 1024 * 1024,
                # 最多储存文件个数,超过十个则重头开始覆盖第一个文件
                'backupCount': 10,
                'formatter': 'verbose'
            },
        },
        # 日志器, 在程序中记录日志时操作对象的配置
        'loggers': {
            'django': {  #定义了一个名为django的日志器
                'handlers': ['console', 'file'],
                #设置是否运行日志向上一级日志功能传递
                'propagate': True,
            },
        }
    }
    
    • version官方解释,没什么用,但是必须要写

    以‘dictConfig version 1’格式解析配置。 目前为止,这是dictConfig 格式唯一的版本。

    自定义异常处理器
    • Django自带只有少部分的异常处理,我们程序中包含其他的异常需要自己进行定义
    # 创建日志器对象
    logger = logging.getLogger('django')
    
    def exception_handler(exc, context):
        """
        自定义异常处理
        :param exc: 异常
        :param context: 抛出异常的上下文
        :return: Response响应对象
        """
        # 调用drf框架原生的异常处理方法
        response = drf_exception_handler(exc, context)
        
        if response is None:
            view = context['view']
            if isinstance(exc, DatabaseError) or isinstance(exc, RedisError):
                # 数据库异常
                logger.error('[%s] %s' % (view, exc))
                response = Response({'message': '<错误信息>'}, status=status.HTTP_507_INSUFFICIENT_STORAGE)
        return response
    
    -----------------
    # 在配置文件中修改异常处理
    REST_FRAMEWORK = {
        # 修改rest_framework框架中的异常处理机制
        'EXCEPTION_HANDLER': 'meiduo_mall.utils.exceptions.exception_handler',
    }
    

    相关文章

      网友评论

        本文标题:Django日志处理

        本文链接:https://www.haomeiwen.com/subject/vnrfyftx.html