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

    # ======日志配置======
    # 错误优先级:NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
    # Django使用dictConfig 格式,需要配置:loggers、handlers、filters、formatters
    # 创建logs日志目录
    if os.path.exists(os.path.join(BASE_DIR, 'logs')) is False:
        os.mkdir(os.path.join(BASE_DIR, 'logs'))
    # logs目录绝对路径
    LOGS_ROOT = os.path.join(BASE_DIR, 'logs')
    # 默认情况下,LOGGING设置与Django的默认logging配置进行合并
    LOGGING = {
        'version': 1,
        # 如果LOGGING中的disable_existing_loggers键为True(默认值)那么默认配置中的所有logger 都将禁用(并非删除,仍然存在)
        # 如果你禁用配置过程,Django仍然执行logging调用,只是调用的是默认定义的logging 行为。
        # 你可以设置disable_existing_loggers为False,并重新定义部分或所有的默认loggers;
        # 或者你可以设置LOGGING_CONFIG为None,并自己处理logging 配置。
        'disable_existing_loggers': False,
        # 日志记录需要转换成文本。Formatter 表示文本的格式。
        # asctime时间、threadName线程名称、thread线程号、name 记录器(loggers)的名称、lineno异常行号、
        # module执行日志记录调用的模块名称、funcName执行日志记录调用的函数名称、levelname日志记录级别的文本名称、message日志消息
        # 具体看:https://docs.python.org/3/library/logging.html#formatter-objects
        'formatters': {
            'standard': {
                'format': '%(asctime)s [%(threadName)s:%(thread)s prototype] [%(name)s:%(lineno)s prototype] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'
            },
            'simple': {
                'format': '%(asctime)s [%(threadName)s:%(thread)s prototype] [%(name)s:%(lineno)s prototype] [%(levelname)s]- %(message)s'
            }
        },
        # Filter用于对从logger传递给handler的日志记录进行额外的控制。
        'filters': {
            'require_debug_false': {
                '()': 'django.utils.log.RequireDebugFalse'
            }
        },
        # Handler决定如何处理logger中的每条消息
        'handlers': {
            'mail_admins': {
                'level': 'ERROR',
                'filters': ['require_debug_false'],
                'class': 'django.utils.log.AdminEmailHandler'
            },
            'default': {
                'level': 'DEBUG',  # 日志级别
                'class': 'logging.handlers.RotatingFileHandler',  # 输出到文件
                'filename': os.path.join(LOGS_ROOT, 'all.log'),  # 日志文件,请确保修改'filename'路径为运行Django应用的用户有权限写入的一个位置
                'maxBytes': 1024 * 1024 * 5,  # 5 MB 文件大小
                'backupCount': 60,  # 备份份数
                'formatter': 'standard',  # 使用哪种日志格式
            },
            'console': {
                'level': 'DEBUG',  # 日志级别
                'class': 'logging.StreamHandler',  # 输出到控制台
                'formatter': 'standard',  # 使用哪种日志格式
            },
            'request_handler': {
                'level': 'DEBUG',  # 日志级别
                'class': 'logging.handlers.RotatingFileHandler',  # 输出到文件
                'filename': os.path.join(LOGS_ROOT, 'django_request.log'),  # 日志文件
                'maxBytes': 1024 * 1024 * 5,  # 5 MB 文件大小
                'backupCount': 60,  # 备份份数
                'formatter': 'standard',  # 使用哪种日志格式
            },
            'exception_handler': {
                'level': 'DEBUG',  # 日志级别
                'class': 'logging.handlers.RotatingFileHandler',  # 输出到文件
                'filename': os.path.join(LOGS_ROOT, 'exception.log'),  # 日志文件
                'maxBytes': 1024 * 1024 * 5,  # 5 MB 文件大小
                'backupCount': 60,  # 备份份数
                'formatter': 'standard',  # 使用哪种日志格式
            },
        },
        # Logger 为日志系统的入口。每个logger 是一个容器,可以向它写入需要处理的消息,可以配置用哪种handlers来处理日志
        # propagate为True时表示向上传播消息,将比level定义的级别更加高级的级别传递到handlers处理
        'loggers': {
            'django': {
                'handlers': ['console'], # 日志处理器
                'level': 'DEBUG', # 记录器级别
                'propagate': False # 是否向上传播
            },
            # 某个app专用
            'BangSo.app': {
                'handlers': ['default', 'console'],
                'level': 'DEBUG',
                'propagate': True
            },
            'django.request': {
                'handlers': ['request_handler'],
                'level': 'INFO',
                'propagate': False
            },
            'exception': {
                'handlers': ['exception_handler'],
                'level': 'ERROR',
                'propagate': False
            },
        }
    }
    

    解析:

            1.formatters:配置打印日志格式

            2.handlers  :用来定义具体处理日志的方式,可以定义多种,"default"就是默认方式,"console"就是打印到控制台方式。

            3.loggers     :用来配置用那种handlers来处理日志,比如你同时需要输出日志到文件、控制台。

    log日志应用:

    logger = logging.getLogger('BangSo.app') #刚才在setting.py中配置的logger
    try:
        mysql= connectMysql('127.0.0.1', '3306', 'david')
    except Exception,e:
                logger.debug(e) #直接将错误写入到日志文件,并将错误输出到控制台上,default、console是“BangSo.app"logger中的handlers
    

     ps:

    handlers与loggers都存在level,两者不同:

      loggers中的level表示可以接受的错误级别,就是说loggers接受level或者比level更高级别的错误,由propagate决定:propagate为True,则向上传播;handlers的level表示日志级别

  • 相关阅读:
    POJ 1659 Frogs' Neighborhood
    zoj 2913 Bus Pass(BFS)
    ZOJ 1008 Gnome Tetravex(DFS)
    POJ 1562 Oil Deposits (DFS)
    zoj 2165 Red and Black (DFs)poj 1979
    hdu 3954 Level up
    sgu 249 Matrix
    hdu 4417 Super Mario
    SPOJ (BNUOJ) LCM Sum
    hdu 2665 Kth number 划分树
  • 原文地址:https://www.cnblogs.com/konglingxi/p/9438301.html
Copyright © 2011-2022 走看看