django 日誌logging的配置以及處理

來源:互聯網
上載者:User

標籤:django logging

    日誌在程式開發中是少不了的,通過日誌我們可以分析到錯誤在什麼地方,有什麼異常。在生產環境下有很大的用途。在Java開發中通常用log4j,logback等第三方組件。那麼在django中是怎麼處理日誌?django利用的就是Python提供的logging模組,但django中要用logging,還得有一定的配置規則,需要在setting中設定。


  1. logging模組

   logging模組為應用程式提供了靈活的手段記錄事件、錯誤、警告和調試資訊。對這些資訊可以進行收集、篩選、寫入檔案、發送給系統日誌等操作,甚至還可以通過網路發送給遠端電腦。

   > 日誌記錄層級

    logging模組的重點在於產生和處理日誌訊息。每條訊息由一些文本和指示其嚴重性的相關層級組成。層級包含符號名稱和數字值。

   

層級 描述
CRITICAL 50 嚴重錯誤/訊息
ERROR 40 錯誤
WARNING 30 警告訊息
INFO 20 通知訊息
DEBUG 10 調試
NOTSET 0 無層級

   > 記錄器

    記錄器負責管理日誌訊息的預設行為,包括日誌記錄層級、輸出目標位置、訊息格式以及其它基本細節。

關鍵字參數 描述
filename 將日誌訊息附加到指定檔案名稱的檔案
filemode 指定用於開啟檔案模式
format 用於組建記錄檔訊息的格式字串
datefmt 用於輸出日期和時間的格式字串
level 設定記錄器的層級
stream 提供開啟的檔案,用於把日誌訊息發送到檔案。

    >format 日誌訊息格式

格式 描述
%(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模組提供了一些處理器,可以通過各種方式處理日誌訊息。使用addHandler()方法將這些處理器添加給Logger對象。另外還可以為每個處理器配置它自己的篩選和層級。

    handlers.DatagramHandler(host,port):發送日誌訊息給位於制定host和port上的UDP伺服器。

      handlers.FileHandler(filename):將日誌訊息寫入檔案filename。

      handlers.HTTPHandler(host, url):使用HTTP的GET或POST方法將日誌訊息上傳到一台HTTP 伺服器。

      handlers.RotatingFileHandler(filename):將日誌訊息寫入檔案filename。如果檔案的大小超出maxBytes制定的值,那麼它將被備份為filename1。

    由於內建處理器還有很多,如果想更深入瞭解。可以查看官方手冊。


2.django 使用logging記錄日誌

    現在大概瞭解了logging的使用方法,現在可以結合django使用。

    

    > 配置setting.py設定檔

#匯入模組import loggingimport django.utils.logimport logging.handlersLOGGING = {    ‘version‘: 1,    ‘disable_existing_loggers‘: True,    ‘formatters‘: {       ‘standard‘: {            ‘format‘: ‘%(asctime)s [%(threadName)s:%(thread)d] [%(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‘: ‘/sourceDns/log/all.log‘,     #日誌輸出檔案            ‘maxBytes‘: 1024*1024*5,                  #檔案大小             ‘backupCount‘: 5,                         #備份份數            ‘formatter‘:‘standard‘,                   #使用哪種formatters日誌格式        },        ‘error‘: {            ‘level‘:‘ERROR‘,            ‘class‘:‘logging.handlers.RotatingFileHandler‘,            ‘filename‘: ‘/sourceDns/log/error.log‘,            ‘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‘: ‘/sourceDns/log/script.log‘,             ‘maxBytes‘: 1024*1024*5,             ‘backupCount‘: 5,            ‘formatter‘:‘standard‘,        },        ‘scprits_handler‘: {            ‘level‘:‘DEBUG‘,            ‘class‘:‘logging.handlers.RotatingFileHandler‘,            ‘filename‘:‘/sourceDns/log/script.log‘,             ‘maxBytes‘: 1024*1024*5,             ‘backupCount‘: 5,            ‘formatter‘:‘standard‘,        }    },    ‘loggers‘: {        ‘django‘: {            ‘handlers‘: [‘default‘, ‘console‘],            ‘level‘: ‘DEBUG‘,            ‘propagate‘: False         },        ‘django.request‘: {            ‘handlers‘: [‘request_handler‘],            ‘level‘: ‘DEBUG‘,            ‘propagate‘: False,        },        ‘scripts‘: {             ‘handlers‘: [‘scprits_handler‘],            ‘level‘: ‘INFO‘,            ‘propagate‘: False        },        ‘sourceDns.webdns.views‘: {            ‘handlers‘: [‘default‘, ‘error‘],            ‘level‘: ‘DEBUG‘,            ‘propagate‘: True        },        ‘sourceDns.webdns.util‘:{            ‘handlers‘: [‘error‘],            ‘level‘: ‘ERROR‘,            ‘propagate‘: True        }    } }

        解析:

        1.formatters:配置列印日誌格式

             2.handler:用來定義具體處理日誌的方式,可以定義多種,"default"就是預設,"console"就是列印到控制台方式。

        3.loggers:用來配置用那種handlers來處理日誌,比如你同時需要輸出日誌到檔案、控制台。


        注意:

        1.loggers類型為"django"這將處理所有類型日誌。

          2.sourceDns.webdns.views 應用的py檔案

 

    > views.py代碼配置

logger = logging.getLogger(‘sourceDns.webdns.views‘)    #剛才在setting.py中配置的loggertry:    mysql= connectMysql(‘127.0.0.1‘, ‘3306‘, ‘david‘)except Exception,e:            logger.error(e)        #直接將錯誤寫入到記錄檔

    

    >查看記錄檔

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/38/AE/wKiom1O0H_bDjmxGAAFYayONrP0965.jpg" title="out.png" alt="wKiom1O0H_bDjmxGAAFYayONrP0965.jpg" />


     今天就寫到這裡吧,其實logging 還有很多功能。如果對logging 感興趣,可以看官方手冊。


本文出自 “系統營運” 部落格,請務必保留此出處http://davidbj.blog.51cto.com/4159484/1433741

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.