Django之logging日志

Django之logging日志

简介

Django使用python自带的logging 作为日志打印工具。简单介绍下logging。

logging 是线程安全的,其主要由4部分组成:

  1. Logger 
    用户使用的直接接口,将日志传递给Handler
  2. Handler 
    控制日志输出到哪里,console,file… 
    一个logger可以有多个Handler
  3. Filter 
    控制哪些日志可以从logger流向Handler
  4. Formatter 
    控制日志的格式

使用

项目里sesetti.py里配置

Django通过在settings文件中使用LOGGING来定制日志输出(包括定义logger, handler, formatter等)

例如,settings文件中定义如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 BASE_LOG_DIR = os.path.join(BASE_DIR, "log") LOGGING = {     'version': 1# 保留字     'disable_existing_loggers': False# 禁用已经存在的logger实例     # 日志文件的格式     'formatters': {         # 详细的日志格式         'standard': {             'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'                       '[%(levelname)s][%(message)s]'         },         # 简单的日志格式         'simple': {             'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'         },         # 定义一个特殊的日志格式         'collect': {             'format': '%(message)s'         }     },     # 过滤器     'filters': {         'require_debug_true': {             '()': 'django.utils.log.RequireDebugTrue',         },     },     # 处理器     'handlers': {         # 在终端打印         'console': {             'level': 'DEBUG',             'filters': ['require_debug_true'],  # 只有在Django debug为True时才在屏幕打印日志             'class': 'logging.StreamHandler'#             'formatter': 'simple'         },         # 默认的         'default': {             'level': 'INFO',             'class': 'logging.handlers.RotatingFileHandler'# 保存到文件,自动切             'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"),  # 日志文件             'maxBytes': 1024 * 1024 * 50# 日志大小 50M             'backupCount': 3# 最多备份几个             'formatter': 'standard',             'encoding': 'utf-8',         },         # 专门用来记错误日志         'error': {             'level': 'ERROR',             'class': 'logging.handlers.RotatingFileHandler'# 保存到文件,自动切             'filename': os.path.join(BASE_LOG_DIR, "xxx_err.log"),  # 日志文件             'maxBytes': 1024 * 1024 * 50# 日志大小 50M             'backupCount': 5,             'formatter': 'standard',             'encoding': 'utf-8',         },         # 专门定义一个收集特定信息的日志         'collect': {             'level': 'INFO',             'class': 'logging.handlers.RotatingFileHandler'# 保存到文件,自动切             'filename': os.path.join(BASE_LOG_DIR, "xxx_collect.log"),             'maxBytes': 1024 * 1024 * 50# 日志大小 50M             'backupCount': 5,             'formatter': 'collect',             'encoding': "utf-8"         }     },     'loggers': {        # 默认的logger应用如下配置         '': {             'handlers': ['default', 'console', 'error'],  # 上线之后可以把'console'移除             'level': 'DEBUG',             'propagate': True# 向不向更高级别的logger传递         },         # 名为 'collect'的logger还单独处理         'collect': {             'handlers': ['console', 'collect'],             'level': 'INFO',         }     }, }

views.py里使用

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 import logging # 生成一个以当前文件名为名字的logger实例 logger = logging.getLogger(__name__) # 生成一个名为collect的logger实例 collect_logger = logging.getLogger("collect")   def index(request):     logger.debug("一个萌萌的请求过来了。。。。")     logger.info("一个更萌的请求过来了。。。。")     logger.debug("这是app01里面的index视图函数")       collect_logger.info("用户1:河南")       return HttpResponse("OK")

流程

Django之logging日志

 
 
上一篇:Python logging模块的使用


下一篇:实现一个完整的发布订阅模式