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

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

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

一、日志的概念

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

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

二、Django日志

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

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

級別

描述

CRITICAL/FATAL

50

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

ERROR

40

錯(cuò)誤

WARNING

30

警告消息

INFO

20

通知消息

DEBUG

10

調(diào)試

NOTSET

0

無級別

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

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

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

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

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

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

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

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

函數(shù)

說明

logging.debug(msg, args, *kwargs)

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

logging.info(msg, args, *kwargs)

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

logging.warning(msg, args, *kwargs)

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

logging.error(msg, args, *kwargs)

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

logging.critical(msg, args, *kwargs)

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

logging.log(level, args, *kwargs)

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

logging.basicConfig(**kwargs)

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

四、Logging日志模塊四大組件

組件名稱

對應(yīng)類名

功能描述

記錄器

Logger

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

處理器

Handler

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

過濾器

Filter

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

格式器

Formatter

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

logging模塊就是通過這些組件來完成日志處理的,logging模塊級別的函數(shù)也是通過這些組件對應(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)對要輸出的日志內(nèi)容做過濾和格式化等處理操作。

1.Logger日志記錄器

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

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

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

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

Django內(nèi)置記錄器

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

2.logging處理器

類名功能描述
logging.StreamHandler類似與sys.stdout或者sys.stderr的任何文件對象(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方法將日志消息上傳到一臺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)情況下,只要級別匹配,任何日志消息都會被處理。不過,也可以通過添加 filter 來給日志處理的過程增加額外條件。例如,可以添加一個(gè) filter 只允許某個(gè)特定來源的 ERROR 消息輸出。

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

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

4.Formatter格式器

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

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

格式描述
%(name)s記錄器 logger 的名字
%(levelno)s數(shù)據(jù)形式的日志記錄級別
%(levelname)s文本形式的日志記錄級別
%(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)用的行號
%(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級別以上發(fā)郵件給admin
            "level": "ERROR",
            "filters": ["require_debug_false"],
            "class": "django.utils.log.AdminEmailHandler",
        },
        'file': {  # Info級別以上保存到日志文件
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,根據(jù)文件大小自動切
            '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會自動記錄
            "handlers": ["mail_admins"],
            "level": "ERROR",
            "propagate": True,  # 向不向更高級別的logger傳遞
        },
        "django.security.DisallowedHost": {  # 對于不在 ALLOWED_HOSTS 中的請求不發(fā)送報(bào)錯(cuò)郵件
            "level": "ERROR",
            "handlers": ["console", "mail_admins"],
            "propagate": True,
        },            
    },
}

2.admin.py配置后臺管理操作日志

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',  # 保存到文件,自動切
            '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ā)送請求后去對應(yīng)的目錄既可查看到日志

總結(jié)

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

相關(guān)文章

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

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

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

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

    這篇文章主要介紹了Python搭建代理IP池實(shí)現(xiàn)檢測IP的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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)常見需求,使用合適的字體不僅可以提升文檔的整體視覺效果,還能突顯關(guān)鍵信息,本文將介紹如何通過Python代碼更改Word文檔字體,實(shí)現(xiàn)批量操作與自動化,需要的朋友可以參考下
    2024-08-08
  • Python通過TensorFlow卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)貓狗識別

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

    今天小編就為大家分享一篇關(guān)于Python通過TensorFlow卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)貓狗識別,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    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控件動態(tài)改變值問題

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

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

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

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

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

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

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

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

最新評論

宣化县| 蒙自县| 旺苍县| 辽阳县| 孝义市| 会理县| 邯郸县| 汤原县| 米易县| 静海县| 修水县| 井陉县| 和林格尔县| 都兰县| 丹凤县| 太仆寺旗| 隆尧县| 温州市| 墨竹工卡县| 宁德市| 达拉特旗| 桐庐县| 保定市| 蒙自县| 额济纳旗| 多伦县| 东至县| 蚌埠市| 库伦旗| 延川县| 边坝县| 屯昌县| 石台县| 武定县| 云龙县| 宝应县| 蓬溪县| 集安市| 高陵县| 延庆县| 大丰市|