做爲一個開發者,日誌的做用相信你們對它的重要性,是毋庸置疑的,它是你代碼優化及bug修復的最佳助手,也是"責任"的最佳證據,若是你是初學者或剛入職場,代碼的編寫還不夠老練,沒有關係,但日誌記得必定必定要記得保留,最基本的原則就是,人過留聲【誰訪問你,何時,傳了什麼,來幹嗎,你何時響應的,響應了什麼】,重要的事情重複說,記日誌,記日誌,記日誌!
廢話很少說,直接乾貨送上,你要作的就是copy!
如下是前篇文章<<Python_學習之項目目錄結構構建>>中說的日誌配置log_config.py,本日誌配置適合python任何項目。python
#!/usr/bin/env python # -*- coding:utf-8 -*- """本地記錄日誌配置文件""" import os import platform BASEDIR = os.path.dirname( os.path.dirname( os.path.dirname( os.path.abspath(__file__)))) # 本地項目日誌路徑 CURRENT_LOG_PATH = os.path.join(BASEDIR, 'log') PREFIX = CURRENT_LOG_PATH if platform.system( ) != 'Windows' else '/opt/logs/python_apps_logs/{}'.format(os.path.basename(BASEDIR)) # 判斷目錄是否存在,若不存在則建立 if not os.path.exists(PREFIX): os.makedirs(PREFIX) # 日誌文件路徑 LOG_PATH_DEBUG = r'%s\debug.log' % PREFIX if platform.system( ) == 'Windows' else '%s/debug.%s.log' % (PREFIX, os.getpid()) LOG_PATH_INFO = r'%s\info.log' % PREFIX if platform.system( ) == 'Windows' else '%s/info.%s.log' % (PREFIX, os.getpid()) LOG_PATH_WARN = r'%s\warn.log' % PREFIX if platform.system( ) == 'Windows' else '%s/warn.%s.log' % (PREFIX, os.getpid()) LOG_PATH_ERROR = r'%s\error.log' % PREFIX if platform.system( ) == 'Windows' else '%s/error.%s.log' % (PREFIX, os.getpid()) # 日誌配置 LOGGING_CONFIG = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 'standard': { 'format': '[%(asctime)s] %(levelname)s::(%(process)d %(thread)d)::%(module)s[line:%(lineno)d] - %(message)s' }, }, 'handlers': { 'error': { 'class': 'logging.handlers.TimedRotatingFileHandler', 'level': 'ERROR', 'formatter': 'standard', 'filename': LOG_PATH_ERROR + '_file', 'when': 'H', 'interval': 1 }, 'warn': { 'class': 'logging.handlers.TimedRotatingFileHandler', 'level': 'WARN', 'formatter': 'standard', 'filename': LOG_PATH_WARN + '_file', 'when': 'H', 'interval': 1 }, 'info': { 'class': 'logging.handlers.TimedRotatingFileHandler', 'level': 'INFO', 'formatter': 'standard', 'filename': LOG_PATH_INFO + '_file', 'when': 'H', 'interval': 1 }, 'debug': { 'class': 'logging.handlers.TimedRotatingFileHandler', 'level': 'DEBUG', 'formatter': 'standard', 'filename': LOG_PATH_DEBUG + '_file', 'when': 'H', 'interval': 1 } }, 'loggers': { 'default': { 'handlers': ['debug', 'info', 'warn', 'error'], 'level': 'DEBUG', 'propagate': True } } }
爲了更加的通用性,若是參照個人寫法,建議目錄結構以下圖:app
在log_conf包中的init.py文件中,構建logger對象,以下:ide
#!/usr/bin/env python學習
import logging.config
from log_conf import log_config優化
logging.config.dictConfig(log_config.LOGGING_CONFIG)
logger = logging.getLogger('default')spa
這樣一個完整的日誌管理就完成了,剩下的就是用了,它的方法很是簡單。debug
# 使用配置好的log_config from log_conf import logger # 能力接口 def test(request_data): code, desc, result = 0, 'success', None logger.debug("請求參數爲:%s" % request_data) try: """do something""" pass except Exception as e: logger.error("xx能力接口發生異常,異常緣由爲:%s" % e.args) code, desc = 1, "系統異常" finally: return code, desc, result