佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Django項(xiàng)目如何正確配置日志(logging)

Django項(xiàng)目如何正確配置日志(logging)

熱門標(biāo)簽:語(yǔ)音系統(tǒng) 電話運(yùn)營(yíng)中心 企業(yè)做大做強(qiáng) Win7旗艦版 呼叫中心市場(chǎng)需求 硅谷的囚徒呼叫中心 百度AI接口 客戶服務(wù)

當(dāng)Django項(xiàng)目正式部署上線后,我們需要設(shè)置DEBUG = False。這時(shí)開(kāi)發(fā)者應(yīng)怎樣檢查Django程序在生產(chǎn)環(huán)境運(yùn)行時(shí)有什么異常或錯(cuò)誤呢?答案就是日志(logging)。在生產(chǎn)環(huán)境中,Django默認(rèn)是不會(huì)在服務(wù)器上自動(dòng)生成log文件的,即使程序出現(xiàn)error級(jí)別的故障也不會(huì)通知管理員。本文將教你如何在Django項(xiàng)目中正確配置日志(logging),讓Django生成log日志文件,并在程序運(yùn)行發(fā)生error級(jí)別故障時(shí)通知管理員。

日志基礎(chǔ)知識(shí)

日志與我們的軟件程序密不可分。它記錄了程序的運(yùn)行情況,可以給我們調(diào)試程序和故障排查提供非常有用的信息。每一條日志信息記錄了一個(gè)事件的發(fā)生。具體而言,它包括了:

  • 事件發(fā)生時(shí)間
  • 事件發(fā)生位置
  • 事件的嚴(yán)重程度--日志級(jí)別
  • 事件內(nèi)容

日志的級(jí)別又分為:

  • DEBUG:用于調(diào)試目的的低級(jí)系統(tǒng)信息
  • INFO:一般系統(tǒng)信息
  • WARNING:描述已發(fā)生的小問(wèn)題的信息。
  • ERROR:描述已發(fā)生的主要問(wèn)題的信息。
  • CRITICAL:描述已發(fā)生的嚴(yán)重問(wèn)題的信息。

在Django項(xiàng)目中,我們可以針對(duì)日志的不同級(jí)別設(shè)置不同的處理方式。比如INFO級(jí)別及以上的日志我們寫入到log文件里保存,Error級(jí)別及以上的日志我們直接通過(guò)郵件發(fā)送給系統(tǒng)管理員。

Django的日志模塊

Django的日志模塊其實(shí)就是python的logging模塊。它由4部分組成:

  • Logger 記錄儀:生成和記錄每條日志信息及級(jí)別
  • Handler處理程序: 根據(jù)日志信息級(jí)別交由相應(yīng)處理程序處理(比如生成文件或發(fā)送郵件)
  • Filters 過(guò)濾器:日志交由處理程序處理前需要滿足的過(guò)濾條件(比如Debug=True或False)
  • Formaters 格式化程序:決定每條日志的打印輸出格式,可以有完整版的,也有簡(jiǎn)單版的

一個(gè)logger記錄儀的例子如下所示。當(dāng)程序運(yùn)行出現(xiàn)錯(cuò)誤時(shí),它生成了一條級(jí)別為error的日志信息。這條記錄產(chǎn)生后就會(huì)交由Handler處理。

# import the logging library
import logging
# 獲得logger實(shí)例
logger = logging.getLogger(__name__)
def my_view(request, arg1, arg):
    ...
    if error_happens:
        # Log an error message
        logger.error('Something went wrong!')

當(dāng)Debug=True時(shí),日志信息默認(rèn)在console輸出?,F(xiàn)在我們還需要在django配置文件里配置日志(logging)相關(guān)內(nèi)容,使得當(dāng)Debug=False時(shí),日志信息會(huì)輸出到日志文件里或發(fā)送給系統(tǒng)管理員。

settings.py推薦日志配置信息

以下基本配置信息在django cookiecutter推薦使用的logging配置信息上做了修改,可適合大部分項(xiàng)目使用。如果真的希望發(fā)送和接收到郵件還需在settings.py正確配置電子郵箱Email。

# 給ADMINS發(fā)送郵件需要配置
ADMINS = (
 ('admin_name','your@gmail.com'),
)
MANAGERS = ADMINS
# 創(chuàng)建log文件的文件夾
LOG_DIR = os.path.join(BASE_DIR, "logs")

# 基本配置,可以復(fù)用的
LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}},
    "formatters": { # 定義了兩種日志格式
        "verbose": { # 標(biāo)準(zhǔn)
            "format": "%(levelname)s %(asctime)s %(module)s "
            "%(process)d %(thread)d %(message)s"
        },
        'simple': { # 簡(jiǎn)單
            'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
        },
    },
    "handlers": { # 定義了三種日志處理方式
        "mail_admins": { # 只有debug=False且Error級(jí)別以上發(fā)郵件給admin
            "level": "ERROR",
            "filters": ["require_debug_false"],
            "class": "django.utils.log.AdminEmailHandler",
        },
        'file': { # Info級(jí)別以上保存到日志文件
            'level': 'INFO', 
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,根據(jù)文件大小自動(dòng)切
            'filename': os.path.join(LOG_DIR,"info.log"),  # 日志文件
            'maxBytes': 1024 * 1024 * 10,  # 日志大小 10M
            'backupCount': 2,  # 備份數(shù)為 2
            'formatter': 'simple', # 簡(jiǎn)單格式
            'encoding': 'utf-8',
        },
        "console": { # 打印到終端console
            "level": "DEBUG",
            "class": "logging.StreamHandler",
            "formatter": "verbose",
        },
    },
    "root": {"level": "INFO", "handlers": ["console"]},
    "loggers": {
        "django.request": { # Django的request發(fā)生error會(huì)自動(dòng)記錄
            "handlers": ["mail_admins"],
            "level": "ERROR",
            "propagate": True,  # 向不向更高級(jí)別的logger傳遞
        },
        "django.security.DisallowedHost": { # 對(duì)于不在 ALLOWED_HOSTS 中的請(qǐng)求不發(fā)送報(bào)錯(cuò)郵件
            "level": "ERROR",
            "handlers": ["console", "mail_admins"],
            "propagate": True,
        },
    },
}

以上就是Django項(xiàng)目如何正確配置日志(logging)的詳細(xì)內(nèi)容,更多關(guān)于Django 正確配置日志的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Python Django框架實(shí)現(xiàn)應(yīng)用添加logging日志操作示例
  • Django 使用logging打印日志的實(shí)例
  • Django日志模塊logging的配置詳解
  • Django日志及中間件模塊應(yīng)用案例
  • django實(shí)現(xiàn)日志按日期分割
  • django日志默認(rèn)打印request請(qǐng)求信息的方法示例
  • Django在Model保存前記錄日志實(shí)例
  • 如何在django中添加日志功能
  • 基于Django實(shí)現(xiàn)日志記錄報(bào)錯(cuò)信息
  • Django多進(jìn)程滾動(dòng)日志問(wèn)題解決方案
  • Django使用uwsgi部署時(shí)的配置以及django日志文件的處理方法

標(biāo)簽:濟(jì)南 安康 崇左 山西 長(zhǎng)沙 海南 山西 喀什

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Django項(xiàng)目如何正確配置日志(logging)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    潞城市| 云林县| 册亨县| 罗源县| 黄浦区| 宁津县| 肥西县| 乌兰察布市| 涡阳县| 乌拉特中旗| 新巴尔虎右旗| 桦甸市| 于田县| 高密市| 同德县| 乌拉特中旗| 岱山县| 工布江达县| 无为县| 黔西县| 吴桥县| 镇赉县| 彭泽县| 土默特右旗| 光泽县| 枣强县| 富裕县| 新河县| 湘西| 赫章县| 井研县| 福建省| 青浦区| 和政县| 罗田县| 高平市| 社旗县| 德格县| 卓尼县| 南和县| 白山市|