無論是純python項目或者是django項目,日誌的使用大同小異,主要分爲兩個步驟:html
使用python代碼顯示的建立loggers,handlers,formatters,並分別調用他們的配置函數python
建立一個日誌配置文件,而後使用 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
使用字典配置信息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 模塊提供了一些處理器,例如:
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 記錄的消息
import logging logger = logging.getLogger("console") # 顯示調用配置字典定義好的loggers裏面的日誌記錄器。 logger = logging.getLogger(__name__) def index(request): logger.debug("hello")
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 }, } }