最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、日志的概念

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

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

二、Django日志

Django使用python內(nèi)建的logging模塊打印日志,logging配置由:記錄器(Logger)、處理器(Handler)、過(guò)濾器(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

無(wú)級(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ù)

說(shuō)明

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ā)送到合適的目的輸出

過(guò)濾器

Filter

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

格式器

Formatter

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

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

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

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

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

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

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

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

1.Logger日志記錄器

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

每一條日志記錄也包含日志級(jí)別,代表對(duì)應(yīng)消息的嚴(yán)重程度。日志記錄還包含有用的元數(shù)據(jù),來(lái)描述被記錄的事件細(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ù)庫(kù)交互的消息。例如,請(qǐng)求執(zhí)行的每個(gè)應(yīng)用程序級(jí)SQL語(yǔ)句都在調(diào)試級(jí)別記錄到此記錄器

2.logging處理器

類名功能描述
logging.StreamHandler類似與sys.stdout或者sys.stderr的任何文件對(duì)象(file object)輸出信息
logging.FileHandler將日志消息寫(xiě)入文件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)將日志消息寫(xiě)入文件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過(guò)濾器

在日志從 logger 傳到 handler 的過(guò)程中,使用 Filter 來(lái)做額外的控制。

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

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

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

4.Formatter格式器

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

一個(gè) formatter 通常由包含 LogRecord attributes 的 Python 格式化字符串組成,不過(guò)你也可以為特定的格式來(lái)配置自定義的 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': {  # 簡(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,
        },            
    },
}

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': {   # 專門(mén)定義一個(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中簡(jiǎn)單添加自定義日志配置項(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批量處理PDF圖片的操作指南(插入、壓縮、提取、替換、分頁(yè)、旋轉(zhuǎn)、刪除)

    Python批量處理PDF圖片的操作指南(插入、壓縮、提取、替換、分頁(yè)、旋轉(zhuǎn)、刪除)

    圖片是 PDF 文檔的核心元素之一,它們不僅能夠增強(qiáng)文檔的視覺(jué)吸引力,還能有效傳達(dá)信息,幫助讀者更好地理解內(nèi)容和主題,在實(shí)際操作中,我們常需要對(duì)PDF中的圖片進(jìn)行多種處理,這篇文章將詳細(xì)介紹如何使用Python在PDF中實(shí)現(xiàn)圖片插入、提取、替換、壓縮等操作
    2025-04-04
  • Python搭建代理IP池實(shí)現(xiàn)檢測(cè)IP的方法

    Python搭建代理IP池實(shí)現(xiàn)檢測(cè)IP的方法

    這篇文章主要介紹了Python搭建代理IP池實(shí)現(xiàn)檢測(cè)IP的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • python排序的方法實(shí)例總結(jié)

    python排序的方法實(shí)例總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python排序的方法實(shí)例總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-04-04
  • 使用python更改Word文檔字體的操作代碼

    使用python更改Word文檔字體的操作代碼

    更改文字字體是編輯和美化Word文檔時(shí)的一項(xiàng)常見(jiàn)需求,使用合適的字體不僅可以提升文檔的整體視覺(jué)效果,還能突顯關(guān)鍵信息,本文將介紹如何通過(guò)Python代碼更改Word文檔字體,實(shí)現(xiàn)批量操作與自動(dòng)化,需要的朋友可以參考下
    2024-08-08
  • Python通過(guò)TensorFlow卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)貓狗識(shí)別

    Python通過(guò)TensorFlow卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)貓狗識(shí)別

    今天小編就為大家分享一篇關(guān)于Python通過(guò)TensorFlow卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)貓狗識(shí)別,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Python logging模塊用法示例

    Python logging模塊用法示例

    這篇文章主要介紹了Python logging模塊用法,結(jié)合實(shí)例形式分析了Python logging模塊相關(guān)配置、函數(shù)、組件等操作方法與注意事項(xiàng),需要的朋友可以參考下
    2018-08-08
  • Python?tkinter中l(wèi)abel控件動(dòng)態(tài)改變值問(wèn)題

    Python?tkinter中l(wèi)abel控件動(dòng)態(tài)改變值問(wèn)題

    這篇文章主要介紹了Python?tkinter中l(wèi)abel控件動(dòng)態(tài)改變值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • numpy中的transpose函數(shù)中具體使用方法

    numpy中的transpose函數(shù)中具體使用方法

    本文主要介紹了numpy中的transpose函數(shù)中具體使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python讀寫(xiě)二進(jìn)制文件的方法

    python讀寫(xiě)二進(jìn)制文件的方法

    這篇文章主要介紹了python讀寫(xiě)二進(jìn)制文件的方法,實(shí)例分析了Python讀寫(xiě)二進(jìn)制文件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • 解決新django中的path不能使用正則表達(dá)式的問(wèn)題

    解決新django中的path不能使用正則表達(dá)式的問(wèn)題

    今天小編就為大家分享一篇解決新django中的path不能使用正則表達(dá)式的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12

最新評(píng)論

大姚县| 图片| 葫芦岛市| 南京市| 镇原县| 定远县| 清水河县| 陆丰市| 鄯善县| 莱芜市| 大姚县| 彭阳县| 类乌齐县| 凤山市| 中牟县| 庐江县| 樟树市| 监利县| 塔河县| 莎车县| 同心县| 云浮市| 阿拉善左旗| 滦南县| 西乌| 姚安县| 福清市| 古交市| 卓尼县| 玉树县| 公主岭市| 泽州县| 竹山县| 平安县| 合肥市| 青海省| 新巴尔虎右旗| 汾阳市| 丰顺县| 临汾市| 大洼县|