美文网首页git 应用django
django的日志系统

django的日志系统

作者: 裴general | 来源:发表于2018-05-12 17:07 被阅读0次

    摘要

    日志在程序开发中是少不了的,通过日志我们可分析到错误在什么地方,有什么异常。在生产环境下有很大的用途。
    django中使用python提供的logging模块,在django中要用logging,并且需要配置一定的规则。
    这里有一篇文章总结得比较好:https://www.cnblogs.com/luohengstudy/p/6890395.html

    1.logging模块

    logging模块为应用程序提供了灵活的手段记录事件、错误、警告和调试信息。对这些信息可以进行收集、筛选、写入文件、发送给系统日志等操作,甚至还可以通过网络发送给远程计算机。

    • 日志记录级别
      logging模块的重点在于生成和处理日志消息。每条消息由一些文本和指示其严重性的相关级别组成。级别包含符号名称和数字值
      CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTEST
      CRTICAL: 关键错误/消息
      ERROR: 错误
      WARNING: 警告信息
      INFO: 通知信息
      DEBUGZ: 调试信息
      NOTEST: 无级别

    • 记录器
      记录器负责管理日志消息的默认行为,包括日志记录级别、输出目标位置、消息格式以及其它基本细节
      filename: 将日志消息附加到指定文件名的文件夹
      filemode: 指定用于打开的文件模式
      format : 用于生成日志消息的格式化字符串
      datefmt:用于输出日期和时间的格式化字符串
      level: 设置记录器的级别
      stream: 提供打开的文件,用于把日志消息发送到文件

    • format 日志的消息格式


      image.png
    • 内置处理器
      logging模块提供了一些处理器,可以通过各种方式处理日志消息。使用addHandler()方法将这些处理器添加给Logger对象。另外还可以为每个处理器配置它自己的筛选和级别。

      handlers.DatagramHandler(host,port):发送日志消息给位于制定host和port上的UDP服务器。
      handlers.FileHandler(filename):将日志消息写入文件filename。
      handlers.HTTPHandler(host, url):使用HTTP的GET或POST方法将日志消息上传到一台HTTP 服务器。
      handlers.RotatingFileHandler(filename):将日志消息写入文件filename。如果文件的大小超出maxBytes制定的值,那么它将被备份为filename1。

    2.django中使用logging

    • 配置settings.py文件
      (1): 创建日志路径
    # 创建日志的路径
    LOG_PATH = os.path.join(BASE_DIR, 'log')
    # 如果地址不存在,则自动创建log文件夹
    if not os.path.join(LOG_PATH):
        os.mkdir(LOG_PATH)
    

    (2)日志处理
    version : 版本
    disable_existing_loggers: 是否禁用loggger
    formatters : 配置打印的日志格式
    handlers:用来定义具体处理日志的方式,可以定义多种
    loggers: 用来配置用那种handlers来处理日志,比如你同时需要输出日志到文件、控制台
    filters: 用来对那些从 logger 传至 hadnler 的日志记录提供额外的控制

    LOGGING = {
        # version只能为1,定义了配置文件的版本,当前版本号为1.0
        "version": 1,
        # True表示禁用logger
        "disable_existing_loggers": False,
        # 格式化
        'formatters': {
            'default': {
                'format': '%(levelno)s %(funcName) %(module)s %(asctime)s %(message)s '
            },
            'simple': {
                'format': '%(levelno)s %(module)s %(created)s %(message)s'
            }
        },
    
        'handlers': {
            'stu_handlers': {
                'level': 'DEBUG',
                # 日志文件指定为5M, 超过5m重新命名,然后写入新的日志文件
                'class': 'logging.handlers.RotatingFileHandler',
                # 指定文件大小
                'maxBytes': 5 * 1024,
                # 指定文件地址
                'filename': '%s/log.txt' % LOG_PATH,
                'formatter': 'default'
            },
            'uauth_handlers': {
                'level': 'DEBUG',
                # 日志文件指定为5M, 超过5m重新命名,然后写入新的日志文件
                'class': 'logging.handlers.RotatingFileHandler',
                # 指定文件大小
                'maxBytes': 5 * 1024 * 1024,
                # 指定文件地址
                'filename': '%s/uauth.txt' % LOG_PATH,
                'formatter': 'simple'
            }
        },
        'loggers': {
            'stu': {
                'handlers': ['stu_handlers'],
                'level': 'INFO'
            },
            'auth': {
                'handlers': ['uauth_handlers'],
                'level': 'INFO'
            }
        },
    
        'filters': {
    
            }
    }
    
    • 应用日志处理
    import logging
    logger = logging.getLogger('stu')
    def index(request):
        if request.method == 'GET':
            # 记录获取所有学生信息的日志
            stuinfos = StudentInfo.objects.all()
            logger.info('url: %s method: %s 获取学生信息成功' % (request.path, request.method))
            return render(request, 'index.html', {'stuinfos': stuinfos})
    
    • 结果


      image.png

    相关文章

      网友评论

        本文标题:django的日志系统

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