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