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
        },
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM