Django 項目的日志系統(tǒng)

前言

一個 Web 項目,無論是在開發(fā)調試的時候,還是上線為用戶提供服務以后,都需要保留下一些運行當中必要的信息用于日后的維護和故障的定位。Django 中使用 Python 內建的 logging 模塊做日志的收集。

Django 中日志系統(tǒng)配置

logging 模塊配置

logging 模塊為用戶提供了用于配置它的 api(接口函數(shù))- logging.config.dictConfig(config)。這里需要傳遞一個config 參數(shù)(日志配置參數(shù)字典)。config 通過 DictConfigurator 類進行解析,其構造方法使用了 config,同時還有一個 configure() 方法。dictConfig() 方法內部調用 dictConfigClass 初始化一個 DictConfigurator 實例并調用 configure() 方法。

def dictConfig(config): 
    dictConfigClass(config).configure()

如果在 DJANGO 使用的話第一步需要在項目 setting.py 文件中定義這個上面說到的 config(日志配置字典),包括記錄器(loggers)、處理器(handlers)、日志格式(formatters)、過濾器(filters)。

File:project/setting.py
LOGGING = {
    'version': 1, # 標示配置模板版本,int 類型,目前只接收 `1`這個值。
    'disable_existing_loggers': False, # 這個沒太看明白什么意思,了解的朋友麻煩說明下
    'formatters': {
        'standard': {
             'format': '%(levelname)s %(asctime)s %(message)s',
        },
    },
    'filters': {
        # 這里是定義過濾器,需要注意的是,由于 'filters' 是 logging.config.dictConfig 方法要求在配置字典中必須給訂的 key ,所以即使不使用過濾器也需要明確給出一個空的結構。
    },
    'handlers': {
         'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'formatter':'standard',
        },
        'tofile': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'formatter':'standard',
            'filename': 'project/app/log/view.log',
        },
    },
    'loggers': {
        'project.app': {
            'handlers': ['tofile'],
            'level': 'DEBUG',
            'propagate': True,
        },
    }
}

下一步需要在需要記錄日志的地方創(chuàng)建 logger 實例。

File:project/app/views.py
import logging

logger = logging.getLogger(__name__) # 這里使用 __name__ 動態(tài)搜索定義的 logger 配置,這里有一個層次關系的知識點。

def log_test(request):
    logger.error("level error test")
    logger.info("level info test")

運行上面代碼 "level error test" 會被寫入 project/app/log/view.log,因為 logger 對象會根據(jù)層次搜索使用 setting.py 設置中的 project.app 記錄器配置。由于 project.app 記錄器配置綁定了 tofile 處理器,所以只會寫入 error 以上的日志記錄。

總結

到此是一個 Django 中使用日志 logging 模塊的大致方法,細節(jié)還需要閱讀官方文檔,可能有不對的地方,日后慢慢更正。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評論 19 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,290評論 6 342
  • 本文首發(fā)于Gevin的博客 原文鏈接:Python 日志功能詳解 未經 Gevin 授權,禁止轉載 軟件開發(fā)中通過...
    Gevin閱讀 5,137評論 1 24
  • 不知道從什么時候開始 對你的想念開始平淡了 沒有像以前那樣瘋狂了 也許是失落太多了吧! 也許是長時間沒見面了吧! ...
    染情閱讀 578評論 1 1
  • 獅泉河鎮(zhèn)六年前我騎摩托車從拉薩去新疆路過這里,現(xiàn)在這里比六年前還要破敗,所有街道路面破爛不堪,政府的事不說了, 繼...
    野在外閱讀 281評論 1 1

友情鏈接更多精彩內容