zoukankan      html  css  js  c++  java
  • django 1.8 日志配置

    django 1.8 日志配置

    以下为setings配置logging代码片段

    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    LOGDIR = os.path.join(BASE_DIR, "logs")
    LOGFILE = datetime.datetime.now().strftime("%Y-%m-%d") + ".log"
    if not os.path.exists(LOGDIR):
        os.makedirs(LOGDIR)  # 创建路径
    if os.path.isfile(os.path.join(LOGDIR, LOGFILE)):  # 重启的时候删除原始文件
        os.remove(os.path.join(LOGDIR, LOGFILE))
    
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': True,
        'formatters': {
            'standard': {
                'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(levelname)s]- %(message)s'
            },
        },
        'filters': {
        },
        'handlers': {
            'mail_admins': {
                'level': 'ERROR',
                'class': 'django.utils.log.AdminEmailHandler',
                'include_html': True,
            },
            'default': {
                'level':'DEBUG',
                'class':'logging.handlers.RotatingFileHandler',
                'filename': os.path.join(LOGDIR, LOGFILE),  # 或者直接写路径:'c:logsall.log',
                'mode': 'w+',
                'maxBytes': 1024*1024*5,  # 5 MB
                'backupCount': 5,
                'formatter':'standard',
            },
            'console':{
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'formatter': 'standard'
            },
            'request_handler': {
                'level':'DEBUG',
                'class':'logging.handlers.RotatingFileHandler',
                'filename': os.path.join(LOGDIR, 'request_handler.log'), #或者直接写路径:'filename':'c:logs
    equest.log''
                'maxBytes': 1024*1024*5,  # 5 MB
                'backupCount': 5,
                'formatter':'standard',
            },
            'scripts_handler': {
                'level':'DEBUG',
                'class':'logging.handlers.RotatingFileHandler',
                'filename': os.path.join(LOGDIR, 'script.log'),  # 或者直接写路径:'filename':'c:logsscript.log'
                'maxBytes': 1024*1024*5,  # 5 MB
                'backupCount': 5,
                'formatter':'standard',
            },
        },
        'loggers': {
            'django': {
                'handlers': ['default', 'console'],
                'level': 'DEBUG',
                'propagate': False
            },
            'django.request': {
                'handlers': ['request_handler'],
                'level': 'DEBUG',
                'propagate': False
            },
            'scripts': {   # 脚本专用日志
                'handlers': ['scripts_handler'],
                'level': 'INFO',
                'propagate': False
            },
            'app_name': {
                'handlers': ['default'],
                'level': 'INFO',
            }
        }
    }

    下面专门讲解一下: 其实这个配置与python 传统的logging 很类似.
    formatters 用来配置 日志打印的格式
    handlers ,用来定义具体处理日志的方式,可以定义很多种,"default" 就是默认方式,"console" 就是打印到控制台方式.
    loggers 是用来配置用哪几种 handlers 来处理日志,比如你同时需要输出日志到文件,和到控制台,那就必须配置 两种handlers. 在上面的例子中 'app_name" 是典型的例子.
    有一点必须注意的是 loggers 类型 为"django" 这将处理所有类型的日志.
    另外 为什么我配置了一个 'app_name' 的logger,这是因为 django 会根据包的层次结构去找 应该用那个 logger 来处理日志,如果找不到,就不输出日志,而我的项目要输出日志的views.py 都是是放在 app_name 下面的。而且当系统查找是否配置有相应的logger的时候,如果本身这个module 没有logger ,就查找父类是否有logger。比如有一个module:app_name.views. 如果在这里面用如下方式写日志:
    # vi views.py
    import logging
    logger = logging.getLogger('app_name')
    logger.info('my app')
    logger.error('error')
    这个时候也会找到 app_name 去处理,虽然没有定义 "app_name.views" 这样的logger,它会再他的父类找。

    知道了原理,在view中就如同上面介绍的那样,应用就好了
    # vi views.py
    import logging
    logger = logging.getLogger(__name__) # 这里用__name__通用,自动检测.
    logger.info('my app')
    logger.error('error')

    你如果既想看 自己在程序中输出的日志,又想看django自己输出的日志,特别是sql 语句,那么根据上面介绍的,你可以这样做:
    #vi views.py
    import logging
    logger = logging.getLogger('django') # 这里用__name__通用,自动检测.
    logger.info('my app')
    logger.error('error')
    这样,所有的日志你都能看到,包括 django.db.backends 数据库sql语句的日志

    官网日志配置讲解:

    https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-LOGGING 

    https://docs.djangoproject.com/en/1.8/topics/logging/#configuring-logging

    .

  • 相关阅读:
    Spring的认识及基本使用原理
    并发编程面试题(1)
    Java基础面试题(1)
    SET ANSI_NULLS ON 在T-SQL中是什么意思
    MySQL存储过程点滴
    【原创内容】获取爱奇艺视频真实下载地址(分段的)
    【原创内容】获取腾讯视频真实下载地址
    【原创内容】获取优酷视频真实下载地址
    【原创内容】获取百度网盘真实下载地址
    Web移动端使用localStorage缓存Js和CSS文件
  • 原文地址:https://www.cnblogs.com/weiok/p/5366110.html
Copyright © 2011-2022 走看看