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
        },
    }
}
原文地址:https://www.cnblogs.com/KbMan/p/12397075.html