django中的logging使用

無論是純python項目或者是django項目,日誌的使用大同小異,主要分爲兩個步驟:html

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

logging的配置

python中有三種配置日誌的方式:

  1. 使用python代碼顯示的建立loggers,handlers,formatters,並分別調用他們的配置函數python

  2. 建立一個日誌配置文件,而後使用 fileConfig 方法進行配置django

    示例:數據結構

    # 讀取日誌配置文件內容
    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. 使用字典配置信息spa

日誌配置四大組件:

​ 日誌配置數據結構,這裏主要使用 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 (日誌記錄器)debug

    用來配置選擇哪一種 Handles 處理日誌日誌

  • Handles (處理器)code

    定義處理日誌的方式。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
        },
    }
}
相關文章
相關標籤/搜索