• django中的logging使用


    不管是纯python项目或者是django项目,日志的使用大同小异,主要分为两个步骤:

    1. logging 的配置
    2. logging 的使用

    logging的配置

    python中有三种配置日志的方式:

    1. 使用python代码显示的创建loggers,handlers,formatters,并分别调用他们的配置函数

    2. 创建一个日志配置文件,然后使用 fileConfig 方法进行配置

      示例:

      
      # 读取日志配置文件内容
      logging.config.fileConfig('logging.conf')
       
      # 创建一个日志器logger
      logger = logging.getLogger('simpleExample')
       
      # 日志输出
      logger.debug('debug message')
      logger.info('info message')
      logger.warn('warn message')
      logger.error('error message')
      logger.critical('critical message')
      

      示例配置文件 logging.conf:

      [loggers]
      keys=root,simpleExample
       
      [handlers]
      keys=fileHandler,consoleHandler
       
      [formatters]
      keys=simpleFormatter
       
      [logger_root]
      level=DEBUG
      handlers=fileHandler
       
      [logger_simpleExample]
      level=DEBUG
      handlers=consoleHandler
      qualname=simpleExample
      propagate=0
       
      [handler_consoleHandler]
      class=StreamHandler
      args=(sys.stdout,)
      level=DEBUG
      formatter=simpleFormatter
       
      [handler_fileHandler]
      class=FileHandler
      args=('logging.log', 'a')
      level=ERROR
      formatter=simpleFormatter
       
      [formatter_simpleFormatter]
      format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
      
      
    3. 使用字典配置信息

    日志配置四大组件:

    ​ 日志配置数据结构,这里主要使用 Dict 的方式配置日志。

    LOGGING = {
    		'version': 1,
      	'disable_existing_loggers': False,  # 可选项,默认值为True。该选项用于指定是否禁用已存在的日志器loggers
      	'formatters': {
          	'standard': {'format': '%(asctime)s [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s] %(message)s'}
        },
      	'handlers':{},
      	'loggers':{},
      	'root':{} # 可选项,这是root logger的配置信息,其值也是一个字典对象。除非在定义其它logger时明确指定propagate值为no,否则root logger定义的handlers都会被作用到其它logger上
    }
    
    • Loggers (日志记录器)

      用来配置选择哪种 Handles 处理日志

    • Handles (处理器)

      定义处理日志的方式。logging 模块提供了一些处理器,例如:

      • handlers.FileHandler(filename):将日志消息写入文件filename。、
      • handlers.RotatingFileHandler(filename):将日志消息写入文件filename。如果文件的大小超出maxBytes制定的值,那么它将被备份为filename1。
      • StreamHandler:将日志写入到控制台
      • TimedRotatingFileHandler:按照时间分割日志文件,可按天、周、分、秒保存日志文件
    • Filters (过滤器)

    • Formatters (格式化日志输出)

      定义日志输出格式。

      示例:
      'formatters': {
          'standard': {
              'format': '%(asctime)s [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s] %(message)s'}
          },
        
      %(name)s 记录器的名称
      %(levelno)s 数字形式的日志记录级别
      %(levelname)s 日志记录级别的文本名称
      %(filename)s 执行日志记录调用的源文件的文件名称
      %(pathname)s 执行日志记录调用的源文件的路径名称
      %(funcName)s 执行日志记录调用的函数名称
      %(module)s 执行日志记录调用的模块名称
      %(lineno)s 执行日志记录调用的行号
      %(created)s 执行日志记录的时间
      %(asctime)s 日期和时间
      %(msecs)s 毫秒部分
      %(thread)d 线程ID
      %(threadName)s 线程名称
      %(process)d 进程ID
      %(message)s 记录的消息
      

    logging的使用

    import logging
    
    logger = logging.getLogger("console") # 显示调用配置字典定义好的loggers里面的日志记录器。
    logger = logging.getLogger(__name__)
    
    def index(request):
        logger.debug("hello")
    

    django中使用logging

    django中使用logging,只需在 settings.py 中定义配置字典 LOGGING,示例如下:

    ​ settings.py :

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': True,
        'formatters': {
            'standard': {
                'format': '%(asctime)s [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(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': '{}/Log/QWebFX_{}.log'.format(BASE_DIR, datetime.datetime.now().date()),  # 日志输出文件
                'maxBytes': 1024 * 1024 * 5,  # 文件大小
                'backupCount': 5,  # 备份份数
                'formatter': 'standard',  # 使用哪种formatters日志格式
            },
            'error': {
                'level': 'ERROR',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': '{}/Log/Error/QWebFX_Error_{}.log'.format(BASE_DIR, datetime.datetime.now().date()),
                'maxBytes': 1024 * 1024 * 5,
                'backupCount': 5,
                'formatter': 'standard',
            },
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'formatter': 'standard'
            },
            'request_handler': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': '{}/Log/Request/QWebFX_Request_{}.log'.format(BASE_DIR, datetime.datetime.now().date()),
                'maxBytes': 1024 * 1024 * 5,
                'backupCount': 5,
                'formatter': 'standard',
            },
            'scripts_handler': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': '{}/Log/Script/QWebFX_Script_{}.log'.format(BASE_DIR, datetime.datetime.now().date()),
                'maxBytes': 1024 * 1024 * 5,
                'backupCount': 5,
                'formatter': 'standard',
            }
        },
        'loggers': {
            'django': {   # django,打印所有信息到名称为console的handler。
                'handlers': ['default'],
                'level': 'DEBUG',
                'propagate': False
            },
            'django.request': {
                'handlers': ['request_handler'],
                'level': 'DEBUG',
                'propagate': False,
            },
            'scripts': {
                'handlers': ['scripts_handler'],
                'level': 'INFO',
                'propagate': False
            },
            'console': {
                'handlers': ['console'],
                'level': 'DEBUG',
                'propagate': True
            },
            # API/Views 模块的日志处理
            'views': {
                'handlers': ['default', 'error'],
                'level': 'DEBUG',
                'propagate': True
            },
            'util': {
                'handlers': ['error'],
                'level': 'ERROR',
                'propagate': True
            },
        }
    }
    
  • 相关阅读:
    《JavaScript DOM 编程艺术》读书笔记
    《精通CSS:高级Web标准解决方案》读书笔记
    计算机专业考研复试面试数据结构
    单元测试框架NUnit 之 Extensibility 例子
    单元测试框架NUnit 之 Extensibility可扩展性
    你应该知道的 asp.net webform之异步页面
    viewstate 应该注意的
    必须要知道的session
    javascript应该注意的小case数据类型
    单元测试框架NUnit 之 Attributes特性(二)
  • 原文地址:https://www.cnblogs.com/KbMan/p/12397075.html
Copyright © 2020-2023  润新知