国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python 常用內(nèi)置模塊之 logging(日志輸出)

這篇具有很好參考價值的文章主要介紹了python 常用內(nèi)置模塊之 logging(日志輸出)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

概述

Python logging 模塊定義了為應用程序和庫實現(xiàn)靈活的事件日志記錄的函數(shù)和類,可以方便第三方模塊或者是應用使用。這個模塊提供不同的日志級別,并可以采用不同的方式記錄日志,比如文件,HTTP GET/POST,SMTP,Socket 等,甚至可以自定義實現(xiàn)具體的日志記錄方式。

Logging 優(yōu)點:

  • 使用 Python Logging 模塊的主要好處是所有 Python 模塊都可以參與日志記錄
  • Logging 模塊提供了大量具有靈活性的功能
  • 可以控制消息的級別,過濾掉那些并不重要的消息。

日志級別等級排序:critical > error > warning > info > debug

級別越高打印的日志越少,反之亦然。默認情況下日志打印只顯示大于等于 WARNING 級別的日志。


日志記錄的兩種方式

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

  • 方式1:使用 Logging 提供的模塊級別的函數(shù)
  • 方式2:使用 Logging 日志系統(tǒng)的四大組件記錄

logging 模塊常用 API

  • debug(msg: str)、info(msg: str)、warning(msg: str)、error(msg: str) :生成不同級別的日志

  • basicConfig(**kwargs) :配置全局的日志系統(tǒng)參數(shù),通常在應用程序的入口處調(diào)用??梢杂糜谠O置日志級別、輸出格式、輸出位置等參數(shù)。

    它接受一系列關鍵字參數(shù)(kwargs),以設置日志記錄的行為。以下是一些常用參數(shù)

    • level :指定日志記錄的最低級別。只有比該級別高或相同級別的消息才會被記錄。

      可選級別包括 logging.DEBUG、logging.INFO、logging.WARNING、logging.ERROR 和 logging.CRITICAL

    • filename :指定日志輸出的文件名。如果指定了此參數(shù),日志將寫入文件而不是默認的標準輸出。

    • filemode :指定日志文件的打開模式,默認為 ‘a(chǎn)’(追加模式)。

      可以將其設置為 ‘w’(覆蓋模式)或其他文件打開模式。

    • format :指定日志消息的輸出格式。可以使用格式化字符串來定義輸出的內(nèi)容和樣式

    • datefmt :指定日期和時間的格式。

      如果 format 中包含 %asctime%,則可以使用此參數(shù)自定義日期和時間的顯示方式。

    • style :指定格式字符串的風格,可選值為 ‘%’ 和 ‘{’

      默認為 ‘%’,表示使用傳統(tǒng)的 % 格式化風格??梢赃x擇 ‘{’ 風格來使用更現(xiàn)代的 {} 格式。

    • handlers :指定用于處理日志消息的處理程序列表。

      可以將處理器直接傳遞給 handlers 參數(shù),而不是使用 logger 的 addHandler() 方法添加

      注意:該參數(shù)會直接覆蓋默認的標準輸出處理器

  • getLogger(name: str) :用于創(chuàng)建和配置日志記錄器(logger)。日志記錄器用于在應用程序中生成日志消息,以便跟蹤應用程序的運行和診斷問題。

    通常,可以為每個模塊或子系統(tǒng)創(chuàng)建一個不同的記錄器,以便更好地組織和管理日志消息。

    該方法通常接受一個名稱參數(shù),該參數(shù)用于指定要創(chuàng)建或獲取的日志記錄器的名稱。logger 是單例的,如果多個模塊使用相同的名稱調(diào)用 getLogger,它們將獲取到相同的記錄器實例,從而實現(xiàn)日志消息的集中記錄。

  • FileHandler(filename: str) :獲取一個文件處理器(logging 模塊提供的處理器 handler 之一),用于配置將日志消息寫入指定的文件中,并根據(jù)需要配置級別和格式。

  • StreamHandler() :獲取一個標準輸出流處理器(logging 模塊提供的處理器 handler 之一),用于配置將日志消息輸出到標準輸出流,通常是終端窗口或命令行界面,并根據(jù)需要配置級別和格式。

  • Formatter(format: str) : 獲取 logging 模塊提供的用于定義和格式化日志消息的輸出格式的類對象。

    通過使用 Formatter,可以自定義日志消息的顯示方式,包括日期時間、記錄器名稱、日志級別和消息內(nèi)容等。

    常用自定義日志輸出格式:'%(asctime)s [%(levelname)s] [%(threadName)s] [%(module)s.%(funcName)s.%(lineno)d] : %(message)s'

    日期和時間的格式:'%Y-%m-%d %H:%M:%S'


logging 的四大組件

簡介

logging 模塊采用了模塊化設計,主要包含四種組件:

  • loggers:記錄器,提供應用程序代碼能直接使用的接口
  • handlers:處理器,將記錄器產(chǎn)生的日志發(fā)送至目的地
  • filters:過濾器,提供更好的粒度控制,決定哪些日志會被輸出
  • formatters:格式化器,設置日志內(nèi)容的組成結(jié)構和消息字段

組件之間的關聯(lián)關系

  • 記錄器(logger)需要通過處理器(handler)將日志信息輸出到目標位置,不同的處理器(handler)可以將日志輸出到不同的位置;

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

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

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

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

  • 一個記錄器(logger)可以包含一個或多個處理器(handler)和 過濾器(filter)

    一個處理器(handler)可以新增一個或多個格式器(formatter)和過濾器(filter),而且日志級別將會繼承。


logger:記錄器

常用方法:

  • debug(msg)、info(msg)、warning(msg)、error(msg) :生成不同級別的日志

  • setLevel() :設置記錄器的日志級別,以確定哪些級別的日志消息會被記錄。

    注:

    • 默認日志級別為 WARNING

    • 除了設置日志記錄器的級別,還需要確保與該記錄器關聯(lián)的處理器的日志級別設置一致。

      如果處理器的級別高于記錄器的級別,那么即使記錄器級別足夠低,也不會記錄消息。

  • addFilter(filter) :添加一個過濾器,用于對日志消息進行額外的篩選和處理。

  • addHandler(handler) :添加一個日志處理器,指定如何處理日志消息,例如寫入文件、打印到控制臺等

  • removeFilter(filter) :從日志記錄器中移除指定的過濾器。

  • removeHandler(handler) :從 logger 中移除指定的處理程序


handler:處理器

在 Python 的 logging 模塊中,handlers(處理器)負責定義日志記錄應輸出到何處。處理器確定日志記錄如何處理,無論是將它們發(fā)送到控制臺、寫入文件,還是甚至通過網(wǎng)絡發(fā)送。

以下是 logging 模塊提供的一些常見日志處理器

  • logging.StreamHandler :此處理程序?qū)⑷罩居涗洶l(fā)送到一個流(stream),通常是控制臺(stdout 或 stderr)。適用于在終端中顯示日志消息。

  • logging.FileHandler :此處理程序?qū)⑷罩居涗泴懭胫付ǖ娜罩疚募?/p>

    常用參數(shù):

    • filename(必傳):指定日志文件的基本名稱

    • mode :指定打開文件的模式,默認為 ‘a(chǎn)’(追加模式)

      可以選擇的模式包括:

      • ‘a(chǎn)’:追加模式,在文件末尾追加日志消息
      • ‘w’:寫模式,每次寫入日志消息時都會覆蓋文件
  • logging.handlers.RotatingFileHandler :此處理程序允許在日志文件達到一定大小時進行“滾動”,創(chuàng)建一個新的日志文件??梢灾付ㄗ畲蟮娜罩疚募笮?,一旦達到該大小,就會創(chuàng)建一個新的日志文件。

    常用參數(shù):

    • filename(必傳):指定日志文件的名稱

      輪換后的日志文件會以這個名稱作為前綴,數(shù)字索引會被附加到名稱中以創(chuàng)建不同的日志文件。

      例如,如果設置為 ‘my_log.log’,則生成的文件將類似于 ‘my_log.log’、‘my_log.log.1’、‘my_log.log.2’,以此類推。

    • mode :指定打開文件的模式,默認為 ‘a(chǎn)’(追加模式)

    • maxBytes :指定單個日志文件的最大字節(jié)數(shù)。一旦達到這個大小,會觸發(fā)輪換并創(chuàng)建新的日志文件。

      默認值為 0,表示不限制日志文件的大小。

    • backupCount :指定要保留的舊日志文件的最大數(shù)量。一旦超過這個數(shù)量,最早的日志文件將被刪除。

      默認值為 0,表示不保留舊日志文件。

    • encoding :指定日志文件的編碼方式,默認為 None,表示使用系統(tǒng)默認編碼。

  • logging.handlers.TimedRotatingFileHandler :此處理程序根據(jù)指定的時間間隔(如每天、每小時等)對日志文件進行輪換,可以根據(jù)時間來組織日志文件。

    常用參數(shù):

    • filename(必傳):指定日志文件的基本名稱。輪換后的日志文件會以這個名稱作為前綴,日期和時間戳會被附加到名稱中以創(chuàng)建不同的日志文件

    • when :指定輪換的時間間隔。默認值為 H

      可選值包括:‘S’:秒,‘M’:分鐘,‘H’:小時,‘D’:天,‘W0’ - ‘W6’:每周的某一天,其中 ‘W0’ 表示周日,‘W6’ 表示周六,‘midnight’:每天午夜。

    • interval :指定輪換的時間間隔大小。默認值為 1,表示每個 when 指定的時間單位都會觸發(fā)一次輪換。

    • backupCount :指定在輪換期間要保留的舊日志文件的最大數(shù)量。一旦超過這個數(shù)量,最早的日志文件將被刪除。

      默認值為 0,表示不保留舊日志文件。

    • encoding :指定日志文件的編碼方式,默認為 None,表示使用系統(tǒng)默認編碼。

    • atTime :可選參數(shù),用于指定輪換的準確時間。

      當 when 設置為 ‘S’、‘M’、‘H’ 時,可以使用此參數(shù)來指定具體的時間,例如 'atTime=‘23:30:00’

  • logging.handlers.SocketHandler :將日志消息發(fā)送到網(wǎng)絡套接字,可以用于將日志信息發(fā)送到遠程服務器。

  • logging.handlers.SysLogHandler :將日志消息發(fā)送到系統(tǒng)日志,通常用于在 Unix 系統(tǒng)上記錄系統(tǒng)事件。

  • logging.handlers.NTEventLogHandler :將日志消息發(fā)送到 Windows 事件日志,通常用于在 Windows 系統(tǒng)上記錄事件。


handlers 處理器的一些常用的通用方法:

  • setLevel() :設置記錄器的日志級別。只有達到或超過這個級別的日志消息才會被處理器處理。
  • setFormatter(fmt: Formatter) :設置處理器的日志消息格式化器
  • **addFilter(filter) ** :添加一個過濾器(filter)到處理器。過濾器用于更細粒度地控制哪些日志消息會被處理。
  • removeFilter(filter) :從處理器中移除指定的過濾器。

filter:過濾器

在 Python 的 logging 模塊中,F(xiàn)ilter 類用于過濾日志消息,允許更細粒度地控制哪些日志消息會被處理器處理。

可以自定義一個或多個過濾器,并將它們添加到處理器或記錄器中,以僅允許滿足特定條件的日志消息被記錄或處理。

一些常見的內(nèi)置過濾器:

  • logging.Filter:一個通用的基類過濾器,可以繼承它并實現(xiàn)自定義的 filter(record) 方法來控制哪些日志消息會被處理。

    這是一個靈活的過濾器,可以用于滿足各種不同的需求。

    # 自定義過濾器
    class MyFilter(logging.Filter):
        def filter(self, record):
            # 只有級別為 WARNING 及以上的日志消息才會被記錄
            return record.levelno >= logging.WARNING
    
    # 創(chuàng)建一個自定義過濾器并添加到處理器
    my_filter = MyFilter()
    handler.addFilter(my_filter)
    
  • logging.FilterByLevel(level):根據(jù)日志級別篩選日志消息的過濾器。

    可以指定最低的日志級別,只有達到或超過該級別的日志消息才會被處理。

    例如,如果要僅記錄級別為 WARNING 及以上的日志消息,可以使用如下方式:

    filter = logging.FilterByLevel(logging.WARNING)
    
  • logging.FilterByName(name):根據(jù)記錄器名稱篩選日志消息的過濾器。

    可以使用此過濾器指定特定記錄器的日志消息是否應該被處理。

    例如,如果要僅記錄名為 “my_logger” 的記錄器的日志消息,可以使用如下方式:

    filter = logging.FilterByName('my_logger')
    
  • logging.FilterByValue(key, value):根據(jù)日志記錄中的屬性鍵和值來篩選日志消息。

    只有具有指定鍵和值的屬性的日志消息才會被處理。


formatter:格式化器

在 Python 的 logging 模塊中,F(xiàn)ormatter 類用于定義日志消息的輸出格式。

通過使用格式化器,可以自定義日志消息的外觀,以包括時間戳、日志級別、日志名稱、消息文本等信息。

以下是一些常見的格式化占位符,可以用于創(chuàng)建自定義格式化器:

  • %(asctime)s :字符串形式的當前時間。默認格式是 “%Y-%m-%d %H:%M:%S,sss”,其中 %Y 表示年份、%m 表示月份、%d 表示日期、%H 表示小時、%M 表示分鐘、%S 表示秒鐘、sss 表示毫秒

  • %(levelname)s :文本形式的日志級別

  • %(levelno)s :數(shù)字形式的日志級別

  • %(message)s :用戶輸出的消息

    注:顯式指定毫秒會報錯,原因未知。若需要打印毫秒級的時間,使用默認即可,不要顯式指定時間格式

  • %(name)s :Logger(記錄器)的名字

  • %(pathname)s :調(diào)用日志輸出函數(shù)的模塊的完整路徑名,可能沒有

  • %(filename)s :調(diào)用日志輸出函數(shù)的模塊的文件名

  • %(module)s :調(diào)用日志輸出函數(shù)的模塊名

  • %(funcName)s :調(diào)用日志輸出函數(shù)的函數(shù)名

  • %(lineno)d :調(diào)用日志輸出函數(shù)的語句所在的代碼行

  • %(created)f :當前時間,用 UNIX 標準的表示時間的浮點數(shù)表示,通常是從 Epoch 時間(1970年1月1日起的秒數(shù))

  • %(relativeCreated)d :輸出日志信息時的,自 Logger 創(chuàng)建以來的毫秒數(shù)

  • %(thread)d :線程 ID??赡軟]有

  • %(threadName)s :線程名。可能沒有

  • %(process)d :進程 ID??赡軟]有文章來源地址http://www.zghlxwxcb.cn/news/detail-753306.html


代碼示例

import logging
import socket
import os


log_format = '%(asctime)s [%(levelname)s] [%(threadName)s] [%(module)s.%(funcName)s.%(lineno)d] : %(message)s'
# 配置全局的日志系統(tǒng)參數(shù)
logging.basicConfig(level='DEBUG', format=log_format)

file_dir = './log'
if not os.path.exists(file_dir):
    os.makedirs(file_dir)

# 使用主機名作為日志文件名稱
file_name = os.path.join(file_dir, socket.gethostname() + ".log")
# 創(chuàng)建一個處理器,將日志寫入文件
file_handler = logging.FileHandler(os.path.join(file_name))
file_handler.setFormatter(logging.Formatter(log_format))
# 將日志文件處理器加入到默認記錄器中
logging.getLogger().addHandler(file_handler)

name = "ZhangSan"
logging.debug(f"my name is {name}")

到了這里,關于python 常用內(nèi)置模塊之 logging(日志輸出)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • [python]使用標準庫logging實現(xiàn)多進程安全的日志模塊

    原本應用的日志是全部輸出到os的stdout,也就是控制臺輸出。因其它團隊要求也要保留日志文件,便于他們用其他工具統(tǒng)一采集,另一方面還要保留控制臺輸出,便于出問題的時候自己直接看pod日志。具體需求如下: 日志支持同時控制臺輸出和文件輸出 控制臺的輸出級別可以

    2024年01月23日
    瀏覽(21)
  • 【python基礎語法七】python內(nèi)置函數(shù)和內(nèi)置模塊

    eval 和 exec 在和第三方用戶交互時候,謹慎使用; 應用不一樣: json主要用于傳輸 轉(zhuǎn)換關系 localtime = mktime = ctime

    2024年02月01日
    瀏覽(23)
  • python創(chuàng)建多個logging日志文件

    python創(chuàng)建多個logging日志文件

    為每一個計算過程創(chuàng)建一個單獨的日志文件,并寫入對應的結(jié)果,同時保留控制臺輸出的功能,控制臺輸出與日志文件記錄可以分開單獨控制。 控制臺輸出結(jié)果 ?日志文件輸出

    2024年02月13日
    瀏覽(22)
  • Python實戰(zhàn) | 使用 Python 的日志庫(logging)和 pandas 庫對日志數(shù)據(jù)進行分析

    專欄集錦,大佬們可以收藏以備不時之需 Spring Cloud實戰(zhàn)專欄:https://blog.csdn.net/superdangbo/category_9270827.html Python 實戰(zhàn)專欄:https://blog.csdn.net/superdangbo/category_9271194.html Logback 詳解專欄:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow專欄:https://blog.csdn.net/superdangbo/category_869

    2024年02月05日
    瀏覽(25)
  • Python之第九章 內(nèi)置模塊

    Python之第九章 內(nèi)置模塊

    目錄 第九章 內(nèi)置模塊 1.math模塊 1.查看: 2.常用方法: 2.random模塊 1.查看: ?2.例: 3.random(a,b) 4.random.sample(range(0,20),10) 3.os模塊與os.path模塊 1.作用 2.目錄 3.os模塊與操作系統(tǒng)的關系 4.路徑 5.判斷目錄是否存在 6.創(chuàng)建目錄 7.刪除目錄 8.文件或目錄的重命名 9.獲取文件信息 10.常見

    2024年02月11日
    瀏覽(30)
  • 深入理解Python中的日志記錄(Logging)

    深入理解Python中的日志記錄(Logging)

    ??? 個人主頁 :xmp65535 ??? 專欄 :python技術專欄 目錄 一、Python Logging 模塊概述 二、相關組件 Logger Handler Formatter Filter LogRecord Level 三、基本配置 Formatters格式: 四、記錄日志 五、日志記錄者(Loggers) logging.getLogger(name=None) 六、處理器(Handlers) logging.Handler() RotatingFileHand

    2024年04月23日
    瀏覽(34)
  • Python學習 -- logging模塊

    Python學習 -- logging模塊

    logging 模塊是 Python 中用于記錄日志的標準庫,它提供了豐富的功能,可以幫助開發(fā)者進行日志記錄和管理。以下是關于logging模塊的詳細使用方式,包括日志級別、處理流程、Logger 類、Handler 類、Filter 類、Formatter 類以及模塊中常用函數(shù)等內(nèi)容。 1. 日志級別 ? 2. 處理流程 ?

    2024年02月09日
    瀏覽(17)
  • Python的Logging模塊

    Python的Logging模塊

    日志是指記錄系統(tǒng)或應用程序運行狀態(tài)、事件和錯誤信息的文件或數(shù)據(jù)。在計算機系統(tǒng)中,日志通常用于故障排除、性能分析、安全審計等方面。日志可以記錄各種信息,如系統(tǒng)啟動和關閉時間、應用程序的運行狀態(tài)、用戶登錄和操作記錄、網(wǎng)絡通信數(shù)據(jù)等。通過分析日志,

    2024年02月12日
    瀏覽(17)
  • 使用Python內(nèi)置模塊加速SQL查詢

    大家好,假設你正在查閱一本書的頁面,你想要更快地找到你正在尋找的信息。那么你可能會查找術語索引,然后跳轉(zhuǎn)到引用特定術語的頁面,SQL中的索引與書籍中的索引工作原理類似。 在大多數(shù)實際系統(tǒng)中,都將對包含大量行的數(shù)據(jù)庫表運行查詢(想象一下數(shù)百萬行),需

    2024年02月11日
    瀏覽(97)
  • Python常用內(nèi)置函數(shù)

    Python實用教程_spiritx的博客-CSDN博客 Python 提供豐富了內(nèi)置函數(shù),這些函數(shù)的使用頻率非常用,在編程過程中熟練使用內(nèi)置函數(shù)可以大大減少我們的代碼邏輯和代碼量。 Python 解釋器內(nèi)置了很多函數(shù)和類型,任何時候都能使用。這些內(nèi)置函數(shù)直接使用,是不需要導入庫的。 - 函

    2024年02月10日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包