1. 程式人生 > >[轉]django 日誌logging的配置以及處理

[轉]django 日誌logging的配置以及處理

handler mat exc 管理 系統 critical bdn ecs 自己的

http://davidbj.blog.51cto.com/4159484/1433741

日誌在程序開發中是少不了的,通過日誌我們可以分析到錯誤在什麽地方,有什麽異常。在生產環境下有很大的用途。在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配置文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 #導入模塊 import logging import django.utils.log import logging.handlers LOGGING = { ‘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代碼配置

1 2 3 4 5 6 logger = logging.getLogger(‘sourceDns.webdns.views‘) #剛才在setting.py中配置的logger try: mysql= connectMysql(‘127.0.0.1‘, ‘3306‘, ‘david‘) except Exception,e: logger.error(e) #直接將錯誤寫入到日誌文件

[轉]django 日誌logging的配置以及處理