django日誌設定
阿新 • • 發佈:2019-02-04
# 首先了解一下日誌的基礎知識:
我們使用的是python自帶的logging模組進行的。
重點在於生成和處理日誌訊息。每條訊息由一些文字和指示其嚴重性的相關級別組成。級別包含符號名稱和數字值。
=>日誌等級
級別 | 值 | 描述 |
CRITICAL | 50 | 關鍵錯誤/訊息 |
ERROR | 40 | 錯誤 |
WARNING | 30 | 警告訊息 |
INFO | 20 | 通知訊息 |
DEBUG | 10 | 除錯 |
NOTSET | 0 | 無級別,只要是資訊都會寫入,這樣日誌將會很大,沒必要 |
=> 內建處理器
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。
由於內建處理器還有很多,如果想更深入瞭解。可以檢視官方手冊。
# 在django中的基礎使用
首先在setting檔案裡面設定:
#匯入模組 import logging import django.utils.log import logging.handlers #logging_setting # 為了將日誌檔案按天儲存, rq = time.strftime('%Y%m%d', time.localtime(time.time())) # 日誌檔案路徑 BASE_LOG_DIR = os.path.join(BASE_DIR, "logs") # 日誌logging的基礎配置,分四步走,第一步格式化日誌內容 LOGGING = { 'version': 1, # 保留字 'disable_existing_loggers': False, # 禁用已經存在的logger例項 # 日誌檔案的格式 'formatters': { # 詳細的日誌格式 'standard': { 'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]''[%(levelname)s][%(message)s]' }, # 簡單的日誌格式 'simple': { 'format': '[%(asctime)s][%(levelname)s][%(filename)s:%(lineno)d]%(message)s' }, }, # 第二步:過濾器 'filters': { }, # 第三步 自定義處理器 'handlers': { # 日誌等級CRITICAL > ERROR > WARNING > INFO > DEBUG 'console': { 'level': 'INFO', 'class': 'logging.StreamHandler', #原生的sql語句會列印至日誌,會導致檔案很大。所以最好註釋掉 'stream' : 'ext://sys.stdout', # 檔案重定向的配置,將列印到控制檯的資訊都重定向出去 python manage.py runserver >> /home/aea/log/test.log 'formatter': 'standard' # 制定輸出的格式,注意 在上面的formatters配置裡面選擇一個,否則會報錯 }, 'file': { 'level': 'INFO', 'class': 'logging.FileHandler', 'filename': os.path.join(BASE_LOG_DIR, f"{rq}_info.log"), #這是將普通日誌寫入到日誌檔案中的方法, 'formatter': 'standard' }, # 預設的 'default': { 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', # 儲存到檔案,自動切 'filename': os.path.join(BASE_LOG_DIR, f"{rq}_info.log"), # 日誌檔案 'maxBytes': 1024 * 1024 * 50, # 日誌大小 50M 'backupCount': 3, # 最多備份幾個 'formatter': 'standard', 'encoding': 'utf-8', }, # 專門用來記錯誤日誌 'error': { 'level': 'ERROR', 'class': 'logging.handlers.RotatingFileHandler', # 儲存到檔案,自動切 'filename': os.path.join(BASE_LOG_DIR, f"{rq}_err.log"), # 日誌檔案 'maxBytes': 1024 * 1024 * 50, # 日誌大小 50M 'backupCount': 5, 'formatter': 'standard', 'encoding': 'utf-8', }, }, # 註冊日誌的處理器 'loggers': { 'django': { 'handlers': ['console', 'file'], # 這裡直接輸出到控制檯只是請求的路由等系統console,當使用重定向之後會把所有內容輸出到log日誌 'level': 'INFO', 'propagate': True, }, 'django.request ': { 'handlers': ['console', 'file'], 'level': 'INFO', # 配合上面的將警告log寫入到另外一個檔案 'propagate': True, }, # 預設的logger '': { 'handlers': ['default', 'error'], 'level': 'INFO', 'propagate': True, # 向不向更高級別的logger傳遞 }, 'Server.web.views': { 'handlers': ['default', 'error'], 'level': 'INFO', 'propagate': True }, }, }
以上是基本設定,註冊了這個之後,開起來就好了,自定義的時候只需要在目標頁面建立一個logger 就好了。
自定義: logger = logging.getLogger('Server.web.views') 裡面的是註冊的然後使用就好了。
上面的level後面的必須是大寫,否則會報錯。無法識別的等級。