欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django日志logging的配置和自定義添加方式

 更新時(shí)間:2023年05月10日 16:10:38   作者:菲宇  
這篇文章主要介紹了Django日志logging的配置和自定義添加方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、日志的概念

日志是一種可以追蹤某些軟件運(yùn)行時(shí)所發(fā)生事件的方法。開發(fā)者可以在代碼中調(diào)用日志記錄相關(guān)的方法來表明發(fā)生了某些事情。

一個(gè)事件可以用一個(gè)可包含可選變量數(shù)據(jù)的消息來描述,事件有嚴(yán)重性級(jí)別(level)。

二、Django日志

Django使用python內(nèi)建的logging模塊打印日志,logging配置由:記錄器(Logger)、處理器(Handler)、過濾器(Filter)、格式化(Formatter)。

1.logging模塊默認(rèn)定義了以下幾個(gè)日志等級(jí)

級(jí)別

描述

CRITICAL/FATAL

50

關(guān)鍵錯(cuò)誤/消息

ERROR

40

錯(cuò)誤

WARNING

30

警告消息

INFO

20

通知消息

DEBUG

10

調(diào)試

NOTSET

0

無級(jí)別

日志等級(jí):DEBUG < INFO < WARNING < ERROR < CRITICAL,而日志的信息量是依次減少的。

當(dāng)為某個(gè)應(yīng)用程序指定一個(gè)日志級(jí)別后,應(yīng)用程序會(huì)記錄所有日志級(jí)別大于或等于指定日志級(jí)別的日志信息,而不是僅僅記錄指定級(jí)別的日志信息。

2. logging模塊的使用方式介紹

logging模塊提供了兩種記錄日志的方式:

  • 第一種方式是使用logging提供的模塊級(jí)別的函數(shù)

  • 第二種方式是使用Logging日志系統(tǒng)的四大組件

logging所提供的模塊級(jí)別的日志記錄函數(shù)也是對(duì)logging日志系統(tǒng)相關(guān)類的封裝而已。

三、Logging提供的模塊級(jí)別的函數(shù)

函數(shù)

說明

logging.debug(msg, args, *kwargs)

創(chuàng)建一條嚴(yán)重級(jí)別為DEBUG的日志記錄

logging.info(msg, args, *kwargs)

創(chuàng)建一條嚴(yán)重級(jí)別為INFO的日志記錄

logging.warning(msg, args, *kwargs)

創(chuàng)建一條嚴(yán)重級(jí)別為WARNING的日志記錄

logging.error(msg, args, *kwargs)

創(chuàng)建一條嚴(yán)重級(jí)別為ERROR的日志記錄

logging.critical(msg, args, *kwargs)

創(chuàng)建一條嚴(yán)重級(jí)別為CRITICAL的日志記錄

logging.log(level, args, *kwargs)

創(chuàng)建一條嚴(yán)重級(jí)別為level的日志記錄

logging.basicConfig(**kwargs)

對(duì)root logger進(jìn)行一次性配置

四、Logging日志模塊四大組件

組件名稱

對(duì)應(yīng)類名

功能描述

記錄器

Logger

提供了應(yīng)用程序可一直使用的接口

處理器

Handler

將logger創(chuàng)建的日志記錄發(fā)送到合適的目的輸出

過濾器

Filter

提供了更細(xì)粒度的控制工具來決定輸出哪條日志記錄,丟棄哪條日志記錄

格式器

Formatter

決定日志記錄的最終輸出格式

logging模塊就是通過這些組件來完成日志處理的,logging模塊級(jí)別的函數(shù)也是通過這些組件對(duì)應(yīng)的類來實(shí)現(xiàn)的。這些組件之間的關(guān)系描述:

  • 記錄器(logger)需要通過處理器(handler)將日志信息輸出到目標(biāo)位置,如:文件、sys.stdout、網(wǎng)絡(luò)等;

  • 不同的處理器(handler)可以將日志輸出到不同的位置;

  • 記錄器(logger)可以設(shè)置多個(gè)處理器(handler)將同一條日志記錄輸出到不同的位置;

  • 每個(gè)處理器(handler)都可以設(shè)置自己的過濾器(filter)實(shí)現(xiàn)日志過濾,從而只保留感興趣的日志;

  • 每個(gè)處理器(handler)都可以設(shè)置自己的格式器(formatter)實(shí)現(xiàn)同一條日志以不同的格式輸出到不同的地方。

簡單點(diǎn)說就是:記錄器(logger)是入口,真正干活兒的是處理器(handler),處理器(handler)還可以通過過濾器(filter)和格式器(formatter)對(duì)要輸出的日志內(nèi)容做過濾和格式化等處理操作。

1.Logger日志記錄器

Logger 是日志系統(tǒng)的入口。每個(gè) logger 都是命名了的 bucket, 消息寫入 bucket 以便進(jìn)一步處理。每一條寫入 logger 的消息都是一條日志記錄。

每一條日志記錄也包含日志級(jí)別,代表對(duì)應(yīng)消息的嚴(yán)重程度。日志記錄還包含有用的元數(shù)據(jù),來描述被記錄的事件細(xì)節(jié)。當(dāng) logger 處理一條消息時(shí),會(huì)將自己的日志級(jí)別和這條消息的日志級(jí)別做對(duì)比。

如果消息的日志級(jí)別匹配或者高于 logger 的日志級(jí)別,它就會(huì)被進(jìn)一步處理。否則這條消息就會(huì)被忽略掉。

當(dāng) logger 確定了一條消息需要處理之后,會(huì)把它傳給 Handler。

Django內(nèi)置記錄器

類功能描述
django.request 請(qǐng)求處理相關(guān)的日志消息。5xx響應(yīng)被提升為錯(cuò)誤消息;4xx響應(yīng)被提升為警告消息。
django.server由RunServer命令調(diào)用的服務(wù)器所接收的請(qǐng)求的處理相關(guān)的日志消息。HTTP 5XX響應(yīng)被記錄為錯(cuò)誤消息,4XX響應(yīng)被記錄為警告消息,其他一切都被記錄為INFO。
django.template與模板呈現(xiàn)相關(guān)的日志消息
django.db.backends有關(guān)代碼與數(shù)據(jù)庫交互的消息。例如,請(qǐng)求執(zhí)行的每個(gè)應(yīng)用程序級(jí)SQL語句都在調(diào)試級(jí)別記錄到此記錄器

2.logging處理器

類名功能描述
logging.StreamHandler類似與sys.stdout或者sys.stderr的任何文件對(duì)象(file object)輸出信息
logging.FileHandler將日志消息寫入文件filename。
logging.handlers.DatagramHandler(host,port) 發(fā)送日志消息給位于制定host和port上的UDP服務(wù)器。使用UDP協(xié)議,將日志信息發(fā)送到網(wǎng)絡(luò)
logging.handlers.HTTPHandler(host, url) 使用HTTP的GET或POST方法將日志消息上傳到一臺(tái)HTTP 服務(wù)器。
logging.handlers.RotatingFileHandler(filename)將日志消息寫入文件filename。如果文件的大小超出maxBytes制定的值,那么它將被備份為filenamel。
logging.handlers.SocketHandler使用TCP協(xié)議,將日志信息發(fā)送到網(wǎng)絡(luò)。
logging.handlers.SysLogHandler日志輸出到syslog
logging.handlers.NTEventLogHandler遠(yuǎn)程輸出日志到Windows NT/2000/XP的事件日志
logging.handlers.SMTPHandler遠(yuǎn)程輸出日志到郵件地址
logging.handlers.MemoryHandler日志輸出到內(nèi)存中的制定buffer

3.Filter過濾器

在日志從 logger 傳到 handler 的過程中,使用 Filter 來做額外的控制。

默認(rèn)情況下,只要級(jí)別匹配,任何日志消息都會(huì)被處理。不過,也可以通過添加 filter 來給日志處理的過程增加額外條件。例如,可以添加一個(gè) filter 只允許某個(gè)特定來源的 ERROR 消息輸出。

Filter 還被用來在日志輸出之前對(duì)日志記錄做修改。例如,可以寫一個(gè) filter,當(dāng)滿足一定條件時(shí),把日志記錄從 ERROR 降到 WARNING 級(jí)別。

Filter 在 logger 和 handler 中都可以添加;多個(gè) filter 可以鏈接起來使用,來做多重過濾操作。

4.Formatter格式器

日志記錄最終是需要以文本來呈現(xiàn)的。Formatter 描述了文本的格式。

一個(gè) formatter 通常由包含 LogRecord attributes 的 Python 格式化字符串組成,不過你也可以為特定的格式來配置自定義的 formatter。

格式描述
%(name)s記錄器 logger 的名字
%(levelno)s數(shù)據(jù)形式的日志記錄級(jí)別
%(levelname)s文本形式的日志記錄級(jí)別
%(filename)s執(zhí)行日志記錄調(diào)用的源文件的文件名
%(pathname)s執(zhí)行日志記錄調(diào)用的源文件的 全路徑+文件名
%(funcName)s執(zhí)行日志記錄調(diào)用的函數(shù)名稱
%(module)s調(diào)用的模塊名稱,django是 app 的名稱
%(lineno)d記錄調(diào)用的行號(hào)
%(created)s執(zhí)行日志記錄的時(shí)間
%(asctime)s日期時(shí)間
%(msecs)s毫秒部分
%(thread)s線程ID
%(threadName)s線程名稱
%(process)d進(jìn)程ID
%(message)s記錄的消息,自定義內(nèi)容

五、Django中添加logging

1.在項(xiàng)目setting.py 文件中配置logginger 日志

# 日志配置
# 給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': {  # 簡單
            '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',  # 簡單格式
            '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,
        },            
    },
}

2.admin.py配置后臺(tái)管理操作日志

from django.contrib import admin
@admin.register(admin.models.LogEntry)
class LogEntryAdmin(admin.ModelAdmin):
    """
    該類用于顯示 admin 內(nèi)置的 django_admin_log 表。
    其中,content_type 是指用戶修改的 Model 名
    """
    list_display = ['action_time', 'user', 'content_type', '__str__']
    list_display_links = ['action_time']
    list_filter = ['action_time', 'content_type', 'user']
    list_per_page = 50
    readonly_fields = ['action_time', 'user', 'content_type',
                       'object_id', 'object_repr', 'action_flag', 'change_message']

六、自定義日志

1.現(xiàn)在setting.py日志配置增加配置項(xiàng)

 "handlers": {
     ......
         'user': {   # 專門定義一個(gè)收集特定信息的日志
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自動(dòng)切
            'filename': os.path.join(BASE_DIR+'/logs/', "demo.log"),
            'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 5,
            'formatter': 'verbose',
            'encoding': "utf-8"
        },
     ......
    }
  "loggers": {
      ......
        'user_log': {      # 名為 'demo'的logger還單獨(dú)處理
            'handlers': ['user'],
            "propagate": True,
            'level': 'INFO',
        },
       ......
       }

2.在view.py中簡單添加自定義日志配置項(xiàng)

# 調(diào)用setting.py中創(chuàng)建額user_log的logger實(shí)例
logger = logging.getLogger('user_log')
def test(request):
  logger.info(request.user.username+',添加成功' )
  return Httpresponse('Success')

3.在setting.py下配置日志文件為logs/demo.log

發(fā)送請(qǐng)求后去對(duì)應(yīng)的目錄既可查看到日志

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列及雙端隊(duì)列

    python數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列及雙端隊(duì)列

    在上一章的學(xué)習(xí)中,我們主要學(xué)習(xí)了怎么去衡量一個(gè)算法的好壞,比較常見的方式是使用大O記法,就是所謂的時(shí)間復(fù)雜度,這一章節(jié)我來學(xué)習(xí)基本的數(shù)據(jù)結(jié)構(gòu),如棧、隊(duì)列和雙端隊(duì)列等等。感興趣的小伙伴可以參考一下
    2021-12-12
  • 詳解python中Numpy的屬性與創(chuàng)建矩陣

    詳解python中Numpy的屬性與創(chuàng)建矩陣

    這篇文章給大家分享了關(guān)于python中Numpy的屬性與創(chuàng)建矩陣的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2018-09-09
  • 解決Python下json.loads()中文字符出錯(cuò)的問題

    解決Python下json.loads()中文字符出錯(cuò)的問題

    今天小編就為大家分享一篇解決Python下json.loads()中文字符出錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 簡單介紹Python中用于求最小值的min()方法

    簡單介紹Python中用于求最小值的min()方法

    這篇文章主要介紹了簡單介紹Python中用于求最小值的min()方法,是Python入門中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • pandas?Dataframe實(shí)現(xiàn)批量修改值的方法

    pandas?Dataframe實(shí)現(xiàn)批量修改值的方法

    這篇文章主要介紹了pandas?Dataframe實(shí)現(xiàn)批量修改值的方法,在使用dataframe的時(shí)候?有時(shí)候會(huì)碰到需要批量修改數(shù)據(jù)的時(shí)候,下面文章主要說明兩種情況使用iloc對(duì)某幾行某幾列進(jìn)行全部修該和對(duì)數(shù)據(jù)進(jìn)行判定后,相互+/-/*某個(gè)數(shù),使用內(nèi)置函數(shù),需要的朋友可以參考一下
    2022-06-06
  • Python3實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲

    Python3實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲

    這篇文章主要為大家詳細(xì)介紹了Python3實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 基于Python實(shí)現(xiàn)股票數(shù)據(jù)分析的可視化

    基于Python實(shí)現(xiàn)股票數(shù)據(jù)分析的可視化

    在購買股票的時(shí)候,可以使用歷史數(shù)據(jù)來對(duì)當(dāng)前的股票的走勢(shì)進(jìn)行預(yù)測(cè),這就需要對(duì)股票的數(shù)據(jù)進(jìn)行獲取并且進(jìn)行一定的分析。本文將介紹如何通過Python實(shí)現(xiàn)股票數(shù)據(jù)分析的可視化,需要的可以參考一下
    2021-12-12
  • Python數(shù)據(jù)可視化之基于pyecharts實(shí)現(xiàn)的地理圖表的繪制

    Python數(shù)據(jù)可視化之基于pyecharts實(shí)現(xiàn)的地理圖表的繪制

    今天給大家?guī)淼氖荘ython的相關(guān)知識(shí),文章圍繞著pyecharts繪制地理圖表展開,文中有非常詳細(xì)的代碼示例及介紹,需要的朋友可以參考下
    2021-06-06
  • 推薦Python小白理想的IDE編輯器thonny

    推薦Python小白理想的IDE編輯器thonny

    這篇文章主要為大家介紹了推薦一款Python編輯器thonny,非常適合Python使用,具體原因文中給出詳細(xì)說明,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • Python實(shí)現(xiàn)PDF到Word文檔的高效轉(zhuǎn)換

    Python實(shí)現(xiàn)PDF到Word文檔的高效轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了如何使用Python編程語言,結(jié)合庫和工具,將PDF文件轉(zhuǎn)換為可編輯的Word文檔,使文檔的編輯變得方便高效,需要的可以參考下
    2024-01-01

最新評(píng)論