Django日志处理

日志处理

日志级别
  • 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',
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容

  • From:Python之日志处理(logging模块) - 云游道士 - 博客园 https://www.cnbl...
    vigny的先生阅读 2,683评论 3 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 本文翻译自logging howto 基础教程 日志是跟踪软件运行时发生事件的一种手段。Python开发者在代码中...
    大蟒传奇阅读 4,253评论 0 17
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,982评论 0 6
  • 武志红曾说: 当遇到什么人或事时,不是将注意力集中在外部,而是先来关照自己,先与自己的内在对话。 问题出...
    晚起画蛾眉阅读 237评论 0 3