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

Django?logging日志模塊實例詳解(日志記錄模板配置)

 更新時間:2022年08月21日 09:46:47   作者:在奮斗的大道  
Django使用python自帶的logging作為日志打印工具,下面這篇文章主要給大家介紹了Django?logging日志模塊(日志記錄模板配置)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

一.Django日志

Django使用python內(nèi)建的logging模塊打印日志,Python的logging配置由四個部分組成:

1>.記錄器(Logger)

2>.處理程序(Handler)

3>.過濾器(Filter)

4>.格式化(Formatter)

二、Logger 記錄器

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

Logger 可以配置 日志級別。日志級別描述了由該 logger 處理的消息的嚴(yán)重性。Python 定義了下面幾種日志級別:

  • DEBUG:排查故障時使用的低級別系統(tǒng)信息
  • INFO:一般的系統(tǒng)信息
  • WARNING:描述系統(tǒng)發(fā)生了一些小問題的信息
  • ERROR:描述系統(tǒng)發(fā)生了大問題的信息
  • CRITICAL:描述系統(tǒng)發(fā)生嚴(yán)重問題的信息

每一條寫入 logger 的消息都是一條 日志記錄。每一條日志記錄也包含 日志級別,代表對應(yīng)消息的嚴(yán)重程度。日志記錄還包含有用的元數(shù)據(jù),來描述被記錄的事件細節(jié),例如堆棧跟蹤或者錯誤碼。

當(dāng) logger 處理一條消息時,會將自己的日志級別和這條消息的日志級別做對比。如果消息的日志級別匹配或者高于 logger 的日志級別,它就會被進一步處理。否則這條消息就會被忽略掉。

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

Django 內(nèi)置記錄器

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

三、Handler 處理程序

Handler 是決定如何處理 logger 中每一條消息的引擎。它描述特定的日志行為,比如把消息輸出到屏幕、文件或網(wǎng)絡(luò) socket。

和 logger 一樣,handler 也有日志級別的概念。如果一條日志記錄的級別不匹配或者低于 handler 的日志級別,對應(yīng)的消息會被 handler 忽略。

一個 logger 可以有多個 handler,每一個 handler 可以有不同的日志級別。這樣就可以根據(jù)消息的重要性不同,來提供不同格式的輸出。例如,你可以添加一個 handler 把 ERROR 和 CRITICAL 消息發(fā)到尋呼機,再添加另一個 handler 把所有的消息(包括 ERROR 和 CRITICAL 消息)保存到文件里以便日后分析。

Logging 自身攜帶Handler

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遠程輸出日志到Windows NT/2000/XP的事件日志
logging.handlers.SMTPHandler遠程輸出日志到郵件地址
logging.handlers.MemoryHandler日志輸出到內(nèi)存中的制定buffer

注意:由于內(nèi)置處理器還有很多,如果想更深入了解??梢圆榭垂俜绞謨?。 

四、Filter過濾器

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

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

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

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

五、Formatters格式化器

日志記錄最終是需要以文本來呈現(xiàn)的。Formatter 描述了文本的格式。一個 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í)行日志記錄的時間
%(asctime)s日期時間
%(msecs)s毫秒部分
%(thread)s線程ID
%(threadName)s線程名稱
%(process)d進程ID
%(message)s記錄的消息,自定義內(nèi)容

時間格式參數(shù):

格式描述
'S'Seconds
'M'Minutes
'H'Hours
'D'Days
'W0' - 'W6'Weekday (0=Monday)
'midnight'Roll over at midnight

六:Django 集成日志logginger 模塊

1、在項目setting.py 文件中,配置logginger 日志, 核心代碼如下:

# 日志配置
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
            'style': '{',
        },
        'simple': {
            'format': '{levelname} {message}',
            'style': '{',
        },
        "default": {
            "format": '%(asctime)s %(name)s  %(pathname)s:%(lineno)d %(module)s:%(funcName)s '
                      '%(levelname)s- %(message)s',
            "datefmt": "%Y-%m-%d %H:%M:%S"
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'default'
        },
        'file': {
            'level': 'DEBUG',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': os.path.join(BASE_DIR, 'logs/debug.log'),
            'when': "D",
            'interval': 1,
            'formatter': 'default'
        },
        "request": {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'logs/request.log'),
            'formatter': 'default'
        },
        "server": {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'logs/server.log'),
            'formatter': 'default'
        },
        "root": {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'logs/root.log'),
            'formatter': 'default'
        },
 
        "db_backends": {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'logs/db_backends.log'),
            'formatter': 'default'
        },
        "autoreload": {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'logs/autoreload.log'),
            'formatter': 'default'
        }
    },
    'loggers': {
        # 應(yīng)用中自定義日志記錄器
        'mylogger': {
            'level': 'DEBUG',
            'handlers': ['console', 'file'],
            'propagate': True,
        },
        "django": {
            "level": "DEBUG",
            "handlers": ["console", "file"],
            'propagate': False,
        },
        "django.request": {
            "level": "DEBUG",
            "handlers": ["request"],
            'propagate': False,
        },
        "django.server": {
            "level": "DEBUG",
            "handlers": ["server"],
            'propagate': False,
        },
        "django.db.backends": {
            "level": "DEBUG",
            "handlers": ["db_backends"],
            'propagate': False,
        },
        "django.utils.autoreload": {
            "level": "INFO",
            "handlers": ["autoreload"],
            'propagate': False,
        }
    },
    'root': {
        "level": "DEBUG",
        "handlers": ["root"],
    }
}

2、應(yīng)用中添加logginger 日志記錄

1、在應(yīng)用的views.py 文件中添加logging 模塊依賴,并在相關(guān)方法中輸出相關(guān)日志記錄

import logging
 
# 日志輸出常量定義
logger = logging.getLogger('mylogger')

# json 數(shù)據(jù)提交,并轉(zhuǎn)換為實體,執(zhí)行入庫操作
def insertJSON(request):
    logger.info("post request body 請求數(shù)據(jù)提交")
    json_str = request.body
    json_str = json_str.decode()  # python3.6及以上不用這一句代碼
    dict_data = json.loads(json_str)  # loads把str轉(zhuǎn)換為dict,dumps把dict轉(zhuǎn)換為str
 
    item = Book()
    objDictTool.to_obj(item, **dict_data)
    print("名稱: {}, 價格: {},  作者: {}".format(item.name, item.price, item.author))
    # 執(zhí)行數(shù)據(jù)庫插入
    item.save()
    return response_success(message="數(shù)據(jù)入庫成功")

注意:在logginer 配置文件中,定義自定義記錄器mylogger 對應(yīng)實例化對象就是views.py 文件中實例的logging對象。

3、日志記錄結(jié)果展示:

總結(jié)

到此這篇關(guān)于Django logging日志模塊的文章就介紹到這了,更多相關(guān)Django logging日志模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python的reverse函數(shù)翻轉(zhuǎn)結(jié)果為None的問題

    python的reverse函數(shù)翻轉(zhuǎn)結(jié)果為None的問題

    這篇文章主要介紹了python的reverse函數(shù)翻轉(zhuǎn)結(jié)果為None的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 利用Matplotlib繪制折線圖、散點圖、柱狀圖、直方圖、餅圖的實例

    利用Matplotlib繪制折線圖、散點圖、柱狀圖、直方圖、餅圖的實例

    這篇文章主要介紹了利用Matplotlib繪制折線圖、散點圖、柱狀圖、直方圖、餅圖的實例代碼,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python 合并表格詳解

    python 合并表格詳解

    這篇文章主要為大家詳細介紹了python 合并表格的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Django如何實現(xiàn)密碼錯誤報錯提醒

    Django如何實現(xiàn)密碼錯誤報錯提醒

    這篇文章主要介紹了Django如何實現(xiàn)密碼錯誤報錯提醒,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值
    2020-09-09
  • 回調(diào)函數(shù)的意義以及python實現(xiàn)實例

    回調(diào)函數(shù)的意義以及python實現(xiàn)實例

    本篇文章主要介紹了回調(diào)函數(shù)的意義以及python實現(xiàn)實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Python利用裝飾器click處理解析命令行參數(shù)

    Python利用裝飾器click處理解析命令行參數(shù)

    這篇文章主要為大家詳細介紹了Python如何利用裝飾器click實現(xiàn)處理解析命令行參數(shù)功能,文中的示例代碼簡潔易懂,需要的小伙伴快跟隨小編一起了解一下
    2022-10-10
  • 深入淺出Python中的JSON操作和實踐

    深入淺出Python中的JSON操作和實踐

    在現(xiàn)代軟件開發(fā)中,JSON(JavaScript?Object?Notation)已成為數(shù)據(jù)交換的一種標(biāo)準(zhǔn)格式,本文將深入探討Python中處理JSON數(shù)據(jù)的方法和技巧,感興趣的可以了解下
    2024-03-03
  • PyQt5 實現(xiàn)百度圖片下載器GUI界面

    PyQt5 實現(xiàn)百度圖片下載器GUI界面

    本文主要介紹了通過 Pyqt5 實現(xiàn)一個界面化的下載器,在通過網(wǎng)絡(luò)請求實現(xiàn)各種類型的圖片的下載。文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2021-12-12
  • pycharm部署django項目到云服務(wù)器的詳細流程

    pycharm部署django項目到云服務(wù)器的詳細流程

    今天重點給大家介紹pycharm部署django項目到云服務(wù)器的詳細流程,首先大家需要先下載python3.8壓縮包,然后通過一系列命令完成操作,具體實現(xiàn)方法,跟隨小編一起看看吧
    2021-06-06
  • Python?NumPy教程之?dāng)?shù)據(jù)類型對象詳解

    Python?NumPy教程之?dāng)?shù)據(jù)類型對象詳解

    每個?ndarray?都有一個關(guān)聯(lián)的數(shù)據(jù)類型?(dtype)?對象。這個數(shù)據(jù)類型對象(dtype)告訴我們數(shù)組的布局。本文將通過示例詳細講講NumPy的數(shù)據(jù)類型對象,需要的可以參考一下
    2022-08-08

最新評論

滁州市| 油尖旺区| 剑川县| 江门市| 临猗县| 土默特右旗| 焦作市| 鲁山县| 会昌县| 鞍山市| 宁化县| 古丈县| 灵丘县| 安丘市| 巴中市| 冀州市| 蒙阴县| 台山市| 阳西县| 蒙山县| 玛曲县| 玉溪市| 察雅县| 承德市| 军事| 深水埗区| 习水县| 互助| 南木林县| 绍兴县| 潜山县| 盱眙县| 华阴市| 汝南县| 会东县| 天台县| 韶关市| 来宾市| 广宗县| 全南县| 景德镇市|