• 技术文章 >Java >java教程

    Django日志模块logging的配置详解

    高洛峰高洛峰2017-02-16 17:01:02原创656
    日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常。在生产环境下有很大的用处。在java 开发中通常用 log4j,logback 等三方组件。下面这篇文章主要介绍了Django日志模块logging的相关资料,需要的朋友可以参考下。

    前言

    Django对于日志输出的信息是很完善的,request的信息,setting配置,trackback的信息,一应俱全,足够我们调试了。但是在线上环境,如果让用户看到这些信息,是很不安全的(暴露代码)。所以在线上我们要关闭Debug,但是又不能扔掉这些调试信息,这就要用到logging模块。

    logging模块其实是Python的模块,在Django中有很多本地化的支持。

    理解Logger

    首先要理解logging的工作,这里面主要有四个东西:格式器formatter,过滤器filter,处理器handler,日志实例logger。

    处理流程

       formatter
    logger ----> handler ----------------> files, emails
        filter

    处理流程是这样的。首先,在代码中。我们拿到的是logger实例,通过这个实例来记录信息。

    # import the logging library
    import logging
     
    # Get an instance of a logger
    logger = logging.getLogger('django')
     
    def my_view(request, arg1, arg):
     ...
     if bad_mojo:
     # Log an error message
     logger.error('Something went wrong!')

    然后,名字是django的这个logger就会把信息交给相应的handler,handler把信息用formater和filter处理一下,提交log(保存到文件,数据库,或者发送邮件)。

    一般来说,handler可以是send_email,error_file等负责处理的方式,在logger中可以重复使用handler。例如我们的django处理器使用了send_email, error_file 这两个处理器,request处理器使用error_file,info_file两个处理器,logger和handler可以理解成多对多的关系,嘻嘻。

    配置方式

    Python中可以使用多种格式配置logging,比如.conf, .ini等。

    在Django中,我们是把有关logging的配置写到settings里面。相应的配置及解释如下(仅供参考)。

    #管理员邮箱
    ADMINS = (
     ('laixintao','*******@163.com'),
    )
     
    #非空链接,却发生404错误,发送通知MANAGERS
    SEND_BROKEN_LINK_EMAILS = True
    MANAGERS = ADMINS
     
    #Email设置
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_HOST= 'smtp.163.com'#QQ邮箱SMTP服务器(邮箱需要开通SMTP服务)
    EMAIL_PORT= 25 #QQ邮箱SMTP服务端口
    EMAIL_HOST_USER = '**********@163.com' #我的邮箱帐号
    EMAIL_HOST_PASSWORD = '**************' #授权码
    EMAIL_SUBJECT_PREFIX = 'website' #为邮件标题的前缀,默认是'[django]'
    EMAIL_USE_TLS = True #开启安全链接
    DEFAULT_FROM_EMAIL = SERVER_EMAIL = EMAIL_HOST_USER #设置发件人
     
    #logging日志配置
    LOGGING = {
     'version': 1,
     'disable_existing_loggers': True,
     'formatters': {#日志格式 
     'standard': {
      'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'} 
     },
     'filters': {#过滤器
     'require_debug_false': {
      '()': 'django.utils.log.RequireDebugFalse',
      }
     },
     'handlers': {#处理器
     'null': {
      'level': 'DEBUG',
      'class': 'logging.NullHandler',
     },
     'mail_admins': {#发送邮件通知管理员
      'level': 'ERROR',
      'class': 'django.utils.log.AdminEmailHandler',
      'filters': ['require_debug_false'],# 仅当 DEBUG = False 时才发送邮件
      'include_html': True,
     },
     'debug': {#记录到日志文件(需要创建对应的目录,否则会出错)
      'level':'DEBUG',
      'class':'logging.handlers.RotatingFileHandler',
      'filename': os.path.join(BASE_DIR, "log",'debug.log'),#日志输出文件
      'maxBytes':1024*1024*5,#文件大小 
      'backupCount': 5,#备份份数
      'formatter':'standard',#使用哪种formatters日志格式
     },
     'console':{#输出到控制台
      'level': 'DEBUG',
      'class': 'logging.StreamHandler',
      'formatter': 'standard',
     },
     },
     'loggers': {#logging管理器
     'django': {
      'handlers': ['console'],
      'level': 'DEBUG',
      'propagate': False 
     },
     'django.request': {
      'handlers': ['debug','mail_admins'],
      'level': 'ERROR',
      'propagate': True,
     },
     # 对于不在 ALLOWED_HOSTS 中的请求不发送报错邮件
     'django.security.DisallowedHost': {
      'handlers': ['null'],
      'propagate': False,
     },
     } 
    }

    以上的配置文件中,有三个日志处理器。分别是:

    1. ‘django.request':django的request发生error会自动记录,然后使用debug将信息记录到文件,还有mail_admins将信息通过邮件发送给管理员。这里邮件的功能非常棒!并不是一个纯文本信息,而是一个html文件,和我们在浏览器看到的错误页面一模一样!要正常使用邮件功能需要像我一样配置一下上面的邮件发件人信息。我是直接去网易申请了一个邮箱。要格外注意三点:1.一定要去邮件服务商开启SMTP服务;2.不同的邮件服务商可能有一些特殊的设置,比如网易,会给你一个客户端授权码,这个才是密码,而不是网页的登录密码。3 注意服务商有没有对发信频率的限制。

    2. ‘django':使用console处理器,将信息输出。在开发的时候就可以使用这个处理器(什么?print? 太low了!)

    3. 最后一个处理器见注释。

    最后,不要忘了给日志的路径响应的权限。比如Apache2服务器,就需要给www-data写权限:

    sudo chown -R [yourname]:www-data [log]
    sudo chmod -R g+s [log]

    更多Django日志模块logging的配置详解相关文章请关注PHP中文网!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:django 日志 logging
    上一篇:Spring中实现定时调度的几种方法 下一篇:Java虚拟机学习 - 类加载机制
    PHP编程就业班

    相关文章推荐

    • Java学习总结之数组(整理分享)• Java工厂方法模式详解• 详细整理java枚举的使用总结• 带你完全掌握Java NIO(总结分享)• 一起聊聊Java常用数据类型的输入输出

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网