亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python logging 模塊之 logging.basicConfig

系統 1803 0

文章目錄

  • 1. Python logging 模塊之 logging.basicConfig 用法和參數詳解
    • 1.1. logging 模塊簡介
    • 1.2. `logging.basicConfig(**kwargs)`
    • 1.3. LogRecord 屬性

1. Python logging 模塊之 logging.basicConfig 用法和參數詳解

1.1. logging 模塊簡介

??logging 模塊是 Python 內置的標準模塊,主要用于輸出運行日志,可以設置輸出日志的等級、日志保存路徑、日志文件回滾等;相比 print,具備如下優點:

  1. 可以通過設置不同的日志等級,在 release 版本中只輸出重要信息,而不必顯示大量的調試信息;
  2. print 將所有信息都輸出到標準輸出中,嚴重影響開發者從標準輸出中查看其它數據;logging 則可以由開發者決定將信息輸出到什么地方,以及怎么輸出;
  3. 和 print 相比,logging 是線程安全的。

線程安全 :線程執行一段代碼,不會產生不確定的結果,那這段代碼就是線程安全的。
??多線程的時候執行 print 應該是一行行打印,但是很多字符串打在了一起,為什么?
??說明,print 函數被打斷了,被線程切換打斷了。print 函數分兩步,第一步打印字符串,第二步打印換行符,就在這之間,發生了線程的切換。這說明 print 函數是 線程不安全 的。

先舉個例子:

            
              
                import
              
               logging

logging
              
                .
              
              basicConfig
              
                (
              
              level
              
                =
              
              logging
              
                .
              
              INFO
              
                ,
              
              
                format
              
              
                =
              
              
                '%(asctime)s %(filename)s %(levelname)s %(message)s'
              
              
                ,
              
              
                    datefmt
              
                =
              
              
                '%a %d %b %Y %H:%M:%S'
              
              
                ,
              
              
                    filename
              
                =
              
              
                'my.log'
              
              
                ,
              
              
                    filemode
              
                =
              
              
                'w'
              
              
                )
              
              

logging
              
                .
              
              info
              
                (
              
              
                'This is a info.'
              
              
                )
              
              
logging
              
                .
              
              debug
              
                (
              
              
                'This is a debug message.'
              
              
                )
              
              
logging
              
                .
              
              warning
              
                (
              
              
                'This is a warning.'
              
              
                )
              
              
                # 輸出到同目錄下 my.log 文件中的內容:
              
              
Wed 
              
                05
              
               Jun 
              
                2019
              
              
                22
              
              
                :
              
              
                25
              
              
                :
              
              
                32
              
               test
              
                .
              
              py INFO This 
              
                is
              
               a info
              
                .
              
              
Wed 
              
                05
              
               Jun 
              
                2019
              
              
                22
              
              
                :
              
              
                25
              
              
                :
              
              
                32
              
               test
              
                .
              
              py WARNING This 
              
                is
              
               a warning
              
                .
              
            
          

??請讀者根據以下參數自行解讀為什么會有這樣的輸出。

1.2. logging.basicConfig(**kwargs)

??使用默認格式化程序創建 StreamHandler 并將其添加到根日志記錄器中,從而完成日志系統的基本配置。如果沒有為根日志程序定義處理程序,debug()、info()、warning()、error()和 critical() 函數將自動調用 basicConfig()。
??如果根日志記錄器已經為其配置了處理程序,則此函數不執行任何操作。

注解:這個函數應該在其他線程啟動之前從主線程調用。在 2.7.1 和 3.2 之前的 Python 版本中,如果從多個線程調用此函數,則可能(在很少的情況下)不止一次地將處理程序添加到根日志記錄器中,從而導致意想不到的結果,比如在日志中消息被復寫。

??支持以下關鍵字參數。

格式 描述
filename 指定使用 指定的文件名 而不是 StreamHandler 創建 FileHandler。
filemode 如果指定 filename,則以此模式打開文件(‘r’、‘w’、‘a’)。默認為“a”。
format 為處理程序使用指定的格式字符串。
datefmt 使用 time.strftime() 所接受的指定日期/時間格式。
style 如果指定了格式,則對格式字符串使用此樣式。’%’ 用于 printf 樣式、’{’ 用于 str.format()、’$’ 用于 string。默認為“%”。
level 將根記錄器級別設置為指定的級別。默認生成的 root logger 的 level 是 logging.WARNING,低于該級別的就不輸出了。級別排序:CRITICAL > ERROR > WARNING > INFO > DEBUG。(如果需要顯示所有級別的內容,可將 level=logging.NOTSET)
stream 使用指定的流初始化 StreamHandler。注意,此參數與 filename 不兼容——如果兩者都存在,則會拋出 ValueError。
handlers 如果指定,這應該是已經創建的處理程序的迭代,以便添加到根日志程序中。任何沒有格式化程序集的處理程序都將被分配給在此函數中創建的默認格式化程序。注意,此參數與 filename 或 stream 不兼容——如果兩者都存在,則會拋出 ValueError。

1.3. LogRecord 屬性

??LogRecord 有許多屬性,其中大部分是從構造函數的參數派生出來的。(注意,名稱并不總是與 LogRecord 構造函數參數和 LogRecord 屬性完全對應。)這些屬性可用于將記錄中的數據合并到格式字符串中。下表以 % 樣式的格式字符串列出(按字母順序)屬性名、它們的含義和對應的占位符。

??如果您使用 {} 格式 (str.format()),可以使用 {attrname} 作為格式字符串中的占位符。如果您正在使用 $-formatting (string.Template),請使用 ${attrname} 格式。當然,在這兩種情況下,都要用想要使用的實際屬性名替換 attrname。

??在使用 {} 格式的情況下,您可以通過將它們放在屬性名后面來指定格式化標志,并使用冒號將它們與屬性名分隔開。例如 {msecs:03d} 的占位符將把毫秒值 4 格式化為 004。有關可用選項的詳細信息,請參閱 str.format() 文檔。

屬性名稱 格式 描述
args 您不應該自己設置此格式。 參數組成的元組合并到 msg 中以生成消息,或 dict,其值用于合并(當只有一個參數時,它是一個字典)。
asctime %(asctime)s 創建日志記錄時的時間(以便于人識讀的格式)。默認情況下,它的形式是“2003-07-08 16:49:45,896”(逗號后面的數字是時間的毫秒部分)。
created %(created)f 創建日志記錄的時間(由 time.time() 函數返回的時間戳(1970紀元后經過的浮點秒數))。
exc_info 您不應該自己設置此格式。 異常元組(如 sys.exc_info),如果沒有發生異常,則為 None。
filename %(filename)s 路徑名 文件名 部分。
funcName %(funcName)s 包含日志記錄調用的函數的名稱。
levelname %(levelname)s 消息的文本日志級別(‘DEBUG’、‘INFO’、‘WARNING’、‘ERROR’、‘CRITICAL’)。
levelno %(levelno)s 消息的數字日志級別(NOTSET-0、DEBUG-10、INFO-20、WARNING-30、ERROR-40、CRITICAL-50)。
lineno %(lineno)d 發出日志調用的源行號(如果可用)。
message %(message)s 已記錄的消息,計算為 msg % args。這是在調用 Formatter.format() 時設置的。
module %(module)s 模塊(文件名的名稱部分)。
msecs %(msecs)d 創建日志記錄時的毫秒部分。
msg 您不應該自己設置此格式。 在原始日志記錄調用中傳遞的格式字符串。與 args 合并以生成消息或任意對象(請參閱使用任意對象作為消息)。
name %(name)s 用于記錄調用的日志程序的名稱。
pathname %(pathname)s 發出日志調用的源文件的完整路徑名(如果可用)。
process %(process)d 進程ID(如果可用)。
processName %(processName)s 進程名(如果可用)。
relativeCreated %(relativeCreated)d 創建日志記錄的時間(以毫秒為單位)相對于加載日志模塊的時間。
stack_info 您不應該自己設置此格式。 堆棧幀信息(在可用的情況下)從當前線程的堆棧底部開始,直到并包括導致創建此記錄的日志調用的堆棧幀。
thread %(thread)d 線程ID(如果可用)。
threadName %(threadName)s 線程名(如果可用)。

??以上內容翻譯整理自 Python 官方文檔 16.6. logging — Logging facility for Python — Python 3.6.8 documentation


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产美女精品在线观看 | 欧美爱爱视频网站 | 国产精品香蕉在线观看不卡 | 亚洲日日做天天做日日谢 | 一区二区视频免费看 | 午夜免费看 | 成人日b视频 | 一级免费看 | 亚洲国产成人久久综合碰 | 久久久精品免费视频 | 天天操天天噜 | 美女啪啪免费网站 | 性做久久久久久久免费看 | 夜夜夜夜猛噜噜噜噜噜 | 久久有这有精品在线观看 | 日本高清免费不卡在线播放 | 特级全黄一级毛片免费 | 成人aaaa | 大学生一级毛片 | 精品无码久久久久国产 | 国产在线播放一区二区 | 操视频网站 | 91精品国产综合久久青草 | 色偷偷亚洲女性天堂 | 夜色91| 国产乱人视频在线播放不卡 | 日本一区二区三区免费高清在线 | 99精品国产综合久久久久 | 九九视频网 | 狠狠干狠狠色 | 成年女人视频播放免费观看 | 国产一区二区三区久久 | 涩涩99 | 国产成人精品午夜在线播放 | 免费国产精品视频 | 亚洲欧美精品中文字幕 | 黑人巨大vs日本妞 | 99久热在线精品视频播放6 | 91国高清视频 | 欧美日韩国产三级 | 天天爱天天爽 |