django 日誌logging的配置以及處理

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


  1. logging模塊python

   logging模塊爲應用程序提供了靈活的手段記錄事件、錯誤、警告和調試信息。對這些信息能夠進行收集、篩選、寫入文件、發送給系統日誌等操做,甚至還能夠經過網絡發送給遠程計算機。mysql

   > 日誌記錄級別
web

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

   

級別 描述
CRITICAL 50 關鍵錯誤/消息
ERROR 40 錯誤
WARNING 30 警告消息
INFO 20 通知消息
DEBUG 10 調試
NOTSET 0 無級別

   > 記錄器django

    記錄器負責管理日誌消息的默認行爲,包括日誌記錄級別、輸出目標位置、消息格式以及其它基本細節。
服務器

關鍵字參數 描述
filename 將日誌消息附加到指定文件名的文件
filemode 指定用於打開文件模式
format 用於生成日誌消息的格式字符串
datefmt 用於輸出日期和時間的格式字符串
level 設置記錄器的級別
stream 提供打開的文件,用於把日誌消息發送到文件。

    >format 日誌消息格式
網絡

格式 描述
%(name)s 記錄器的名稱
%(levelno)s 數字形式的日誌記錄級別
%(levelname)s 日誌記錄級別的文本名稱
%(filename)s 執行日誌記錄調用的源文件的文件名稱
%(pathname)s 執行日誌記錄調用的源文件的路徑名稱
%(funcName)s 執行日誌記錄調用的函數名稱
%(module)s 執行日誌記錄調用的模塊名稱
%(lineno)s

執行日誌記錄調用的行號ide

%(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 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代碼配置

logger = logging.getLogger('sourceDns.webdns.views')    #剛纔在setting.py中配置的logger

try:
    mysql= connectMysql('127.0.0.1', '3306', 'david')
except Exception,e:
            logger.error(e)        #直接將錯誤寫入到日誌文件

    

    >查看日誌文件

wKiom1O0H_bDjmxGAAFYayONrP0965.jpg


     今天就寫到這裏吧,其實logging 還有不少功能。若是對logging 感興趣,能夠看官方手冊。

相關文章
相關標籤/搜索