日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

如何在Python項目中引入日志

瀏覽:273日期:2022-06-17 18:46:26
目錄Logging模塊的使用簡單使用指定日志輸出樣式日志記錄到文件中自定義日志配置準備日志配置信息準備日志配置信息加載日志配置信息使用日志配置文件創建日志配置文件加載日志配置函數日志效果展示源代碼Logging模塊的使用簡單使用

Logging 模塊提供了一系列便利的函數

它們分別是 debug(), info(), warning(), error(), critical()

import logginglogging.debug(’debug log test’)logging.info(’info log test’)logging.warning(’warning log test’)logging.error(’error log test’)logging.critical(’critical log test’)

輸出結果:

WARNING:root:warning log testERROR:root:error log testCRITICAL:root:critical log test

為什么只輸出了 warning, error 和 critical 的結果,因為 logging 模塊默認使用 warning 日志級別,就是只有 warning 及以上日志等級才會顯示。

日志等級從高到低,如下所示

級別 數值 何時使用 CRITICAL 50 嚴重的錯誤,表明程序已不能繼續執行 ERROR 40 由于嚴重的問題,程序的某些功能已經不能正常執行 WARNING 30 表明有已經或即將發生的意外,程序仍按預期進行 INFO 20 確認程序按預期運行 DEBUG 10 細節信息,僅當診斷問題時適用。 NOTSET 0 無任何等級限制

我們只要把 logging 的默認日志等級改下就好了

import logging# 配置日志等級logging.basicConfig(level=logging.DEBUG)logging.debug(’debug log test’)logging.info(’info log test’)logging.warning(’warning log test’)logging.error(’error log test’)

輸出結果如下:

DEBUG:root:debug log testINFO:root:info log testWARNING:root:warning log testERROR:root:error log test指定日志輸出樣式

當然我們還可以指定日志輸出格式

import logging# 日志輸出樣式log_format = ’%(levelname)s %(asctime)s %(filename)s %(lineno)d %(message)s’logging.basicConfig(format=log_format, level=logging.DEBUG)logging.debug(’debug log test’)logging.info(’info log test’)logging.warning(’warning log test’)logging.error(’error log test’)logging.critical(’critical log test’)

輸出結果如下:

DEBUG 2021-05-27 00:04:26,327 main.py 65 debug log testINFO 2021-05-27 00:04:26,327 main.py 66 info log testWARNING 2021-05-27 00:04:26,327 main.py 67 warning log testERROR 2021-05-27 00:04:26,327 main.py 68 error log testCRITICAL 2021-05-27 00:04:26,327 main.py 69 critical log test

其中日志信息格式化輸出配置樣式說明

%(levelname)s ,日志等級 %(asctime)s ,時間 %(filename)s ,文件名 %(lineno)d ,行號 %(message)s,日志信息

這些配置都是固定,不可隨便寫,還有好多日志格式化樣式,這里只介紹了一些常用的格式配置,大家可以去官網查看更多的格式化配置信息。docs.python.org/zh-cn/3.7/l…

日志記錄到文件中

在 logging.basicConfig 中設置 filename 屬性即可把日志信息寫入文件中

import logging# 日志輸出樣式log_format = ’%(levelname)s %(asctime)s %(filename)s %(lineno)d %(message)s’logging.basicConfig( filename=’test.log’, format=log_format, level=logging.DEBUG)logging.debug(’debug log test’)logging.info(’info log test’)logging.warning(’warning log test’)logging.error(’error log test’)logging.critical(’critical log test’)

運行程序后 test.log 如下內容

如何在Python項目中引入日志

自定義日志配置

通常我們在項目中都是自定義一些通用日志配置,然后供項目全局使用。寫好這些配置下次要在別的項目使用之間復制粘貼過來修改修改一下即可。來康康是如何配置的。

準備日志配置信息

配置日志詳細信息,需要導入 logging.config 來進行加載日志配置信息

首先準備日志配置信息字典

log_dict = { ’version’: 1, ’disable_existing_loggers’: False, # 是否禁用已經存在的日志器 # 日志信息格式化輸出配置 ’formatters’: {# 簡單的日志輸出’simple’: { ’format’: ’%(levelname)s %(module)s %(lineno)d %(message)s’},# 詳細的日志輸出’verbose’: { ’format’: ’%(levelname)s %(asctime)s %(filename)s %(lineno)d %(message)s’}, }, # 日志信息處理器配置 ’handlers’: {# 向終端中輸出日志’console’: { ’level’: ’DEBUG’, # 處理的日志等級,DEBUG及以上 ’class’: ’logging.StreamHandler’, # 日志處理器 ’formatter’: ’simple’ # 日志格式化配置},# 向文件中輸出日志’file’: { ’level’: ’INFO’, # 處理的日志等級,DEBUG及以上 ’class’: ’logging.handlers.RotatingFileHandler’, # 使用文件日志處理器 ’formatter’: ’verbose’, # 日志格式化配置 ’filename’: ’./logs/test.log’, # 日志文件存儲位置 ’maxBytes’: 1024 * 1024,# 每個日志文件最大 10MB, 單位: byte ’backupCount’: 20, # 如果文件滿了, 自動擴充, 最多保留 20 個日志文件 ’encoding’: ’utf8’,}, }, # 默認根日志器 ’root’: {’level’: ’DEBUG’, # 允許接受的日志等級’handlers’: [’console’] # 選擇日志處理器 }, # 自定義的日志器 ’loggers’: {’server’: { ’level’: ’DEBUG’, ’handlers’: [’file’], ’propagate’: True # 設為 False則禁止將日志消息傳遞給父級記錄器的處理程序中} }}準備日志配置信息

配置日志詳細信息,需要導入 logging.config 來進行加載日志配置信息

首先準備日志配置信息字典

log_dict = { ’version’: 1, ’disable_existing_loggers’: False, # 是否禁用已經存在的日志器 # 日志信息格式化輸出配置 ’formatters’: {# 簡單的日志輸出’simple’: { ’format’: ’%(levelname)s %(module)s %(lineno)d %(message)s’},# 詳細的日志輸出’verbose’: { ’format’: ’%(levelname)s %(asctime)s %(filename)s %(lineno)d %(message)s’}, }, # 日志信息處理器配置 ’handlers’: {# 向終端中輸出日志’console’: { ’level’: ’DEBUG’, # 處理的日志等級,DEBUG及以上 ’class’: ’logging.StreamHandler’, # 日志處理器 ’formatter’: ’simple’ # 日志格式化配置},# 向文件中輸出日志’file’: { ’level’: ’INFO’, # 處理的日志等級,DEBUG及以上 ’class’: ’logging.handlers.RotatingFileHandler’, # 使用文件日志處理器 ’formatter’: ’verbose’, # 日志格式化配置 ’filename’: ’./logs/test.log’, # 日志文件存儲位置 ’maxBytes’: 1024 * 1024,# 每個日志文件最大 10MB, 單位: byte ’backupCount’: 20, # 如果文件滿了, 自動擴充, 最多保留 20 個日志文件 ’encoding’: ’utf8’,}, }, # 默認根日志器 ’root’: {’level’: ’DEBUG’, # 允許接受的日志等級’handlers’: [’console’] # 選擇日志處理器 }, # 自定義的日志器 ’loggers’: {’server’: { ’level’: ’DEBUG’, ’handlers’: [’file’], ’propagate’: True # 設為 False則禁止將日志消息傳遞給父級記錄器的處理程序中} }}

其中大字典的 key 都是固定,例如 version,formatters, handlers, root, loggers等都是固定的配置項。而有一些子選項是可以自己自定義如

formatters 下的 simple 和 verbose,是可以改成自己想要的名字。 handlers 下的 console 和 file 也是可以修改的。 loggers 下的 server 都是一樣可以修改的

具體配置的說明,在這字典中都有一一注釋我就不全介紹了,我就介紹一下 handlers 日志處理器的配置

在 logging 模塊中有許多 日志處理器類,我們只需要在 pycharm 中輸入 logging.Handler 就能彈出最基本的幾個日志處理類。

如何在Python項目中引入日志

而上文所用到的 StreamHandler 則是流處理器,日志將隨著系統標準輸入、輸出流展示,而我們的 PyCharm終端、控制臺等 顯示的信息就屬于系統標準輸出流。

而 RotatingFileHandler 日志處理器則是 FileHandler 的子類。其主要作用就是把日志寫入文件中,當文件內容達到最大限制時可以自動擴充日志文件,以達到日志文件的輪換。

加載日志配置信息

然后使用 logging.config.dictConfig() 方法加載日志配置,該方法接受一個 字典 參數。

#!/usr/bin/python3# -*- coding: utf-8 -*-# @Author: Hui# @Desc: { 日志模塊logging的使用 }# @Date: 2021/05/26 23:14import loggingimport logging.configlog_dict = { ’version’: 1, ’disable_existing_loggers’: False, # 是否禁用已經存在的日志器 ...與上文一致故省略 # 默認根日志器 ’root’: {’level’: ’DEBUG’, # 接受的日志等級’handlers’: [’console’] },# 自定義的日志器 ’loggers’: {’server’: { ’level’: ’DEBUG’, ’handlers’: [’file’], ’propagate’: True # 設為 False則禁止將日志消息傳遞給父級記錄器的處理程序中} }}def setup_logging(): ''' 配置日志信息 :return: ''' logging.config.dictConfig(config=log_dict) logger = logging.getLogger()# logger = logging.getLogger(’root’)logger.debug(’debug log test’) logger.info(’info log test’) logger.warning(’warning log test’) logger.error(’error log test’)def main(): setup_logging()if __name__ == ’__main__’: main()

使用 logging.getLogger() 即可獲取相應配置日志器,其接受一個日志器的名字,不傳則默認使用 root 根日志器,同 logging.getLogger(’root’) 效果一致。

如果之間運行程序會出現如下錯誤

ValueError: Unable to configure handler ’file’

那是因為你在日志配置中設置了一個文件處理器 file ,其日志文件將存儲在 filename 配置項中,在這里是

./logs/test.log# 代表存儲在當前路徑下的 logs目錄下的 test.log 文件

Logging 模塊不會自動幫我們創建目錄,因此只需在當前目錄中創建一個 logs 目錄即可。

最后程序運行結果如下

DEBUG main 74 debug log testINFO main 75 info log testWARNING main 76 warning log testERROR main 77 error log test

不用跟 root 根日志器,使用 server 日志器,代碼如下

import loggingimport logging.configlog_dict = {...同上文省略...}def setup_logging(): ''' 配置日志信息 :return: ''' logging.config.dictConfig(config=log_dict) # logger = logging.getLogger() logger = logging.getLogger(’server’) logger.debug(’debug log test’) logger.info(’info log test’) logger.warning(’warning log test’) logger.error(’error log test’)def main(): setup_logging()if __name__ == ’__main__’: main()

運行結果如下:

控制臺

DEBUG main 75 debug log testINFO main 76 info log testWARNING main 77 warning log testERROR main 78 error log test

日志文件 logs/test.log

如何在Python項目中引入日志

由于 server 日志器設置了 ’propagate’: True,會 將日志消息傳遞給父級記錄器的處理程序中,因此不僅控制臺會顯示日志信息,文件也會記錄,但文件記錄的等級被設置成 INFO 了,因此 DEBUG 調試日志信息,將不會出現在文件中。

使用日志配置文件

這里我將采用 yaml 格式的日志配置文件。具體配置內容和上文大致一樣,多了一個 error_file_handler 錯誤日志處理器,目的就是把 錯誤日志單獨放在一個文件中,方便以后排查錯誤。

創建日志配置文件

創建 logging.yaml 文件,內容如下所示

version: 1disable_existing_loggers: true# 日志信息格式化輸出配置formatters: simple:format: ’%(levelname)s %(filename)s %(lineno)d %(message)s’ verbose:format: ’%(levelname)s %(asctime)s -Loc %(filename)s -Row %(lineno)d -%(name)s %(message)s’# 日志信息處理器配置handlers: console:class: logging.StreamHandlerlevel: DEBUGformatter: simplestream: ext://sys.stdout # 錯誤日志單獨處理 error_file_handler:class: logging.handlers.RotatingFileHandlerlevel: ERRORformatter: verbosefilename: ./logs/errors.log # 錯誤日志文件存儲位置maxBytes: 10485760 # 每個日志文件最大 10MBbackupCount: 20 # 如果文件滿了, 自動擴充, 最多保留 20 個日志文件encoding: utf8 server_file_handler: class: logging.handlers.RotatingFileHandler level: INFO # 只在文件中記錄INFO級別及以上的log formatter: verbose filename: ./logs/server.log # 項目日志文件, 記錄所有日志信息 maxBytes: 10485760 # 10MB backupCount: 30 encoding: utf8# 根日志器root: level: DEBUG handlers: [console]# 日志器loggers: server:level: DEBUG # 允許打印 DEBUG 及以上loghandlers: [server_file_handler, error_file_handler]propagate: True # 設為 False則禁止將日志消息傳遞給父級記錄器的處理程序中加載日志配置函數

# log_test.py 文件import osimport yamlimport loggingimport coloredlogsimport logging.config# 項目根路徑BASE_DIR = os.path.dirname(os.path.abspath(__file__))# 日志配置文件LOG_CONF_FILE = os.path.join(BASE_DIR, ’logging.yaml’)def setup_logging(default_path=LOG_CONF_FILE, default_level=logging.DEBUG, env_key=’LOG_CFG’): ''' 配置項目日志信息 :param default_path: 日志文件默認路徑 :param default_level: 日志默認等級 :param env_key: 系統環境變量名 :return: ''' path = default_path value = os.getenv(env_key, None) # 獲取對應的環境變量值 if value is not None:path = value if os.path.exists(path):with open(path, mode=’r’, encoding=’utf-8’) as f: try:logging_yaml = yaml.safe_load(f.read())logging.config.dictConfig(logging_yaml)coloredlogs.install(level=’DEBUG’) except Exception as e:print(e)print(’無法加載日志配置文件, 請檢查日志目錄是否創建, 使用默認的日志配置’)logging.basicConfig(level=default_level)coloredlogs.install(level=default_level) else:logging.basicConfig(level=default_level)coloredlogs.install(level=default_level)print(’日志配置文件不存在, 使用默認的日志配置’)

這里使用到第三方庫如下

PyYaml 是用于讀取 yaml 格式的日志配置文件 Coloredlogs 用于讓日志在控制臺中有顏色顯示。

然后我們在項目中只要執行完 setup_logging() 日志配置函數

其他模塊直接使用 logging.getLogger(’server’) 就可獲取我們配置好的日志器。

# log_demo.py 文件import logginglogger = logging.getLogger(’server’) # 維護一個全局日志對象logger.debug(’debug log test’)def log_test1(): logger.info(’info log test’)def log_test2(): try:a = 1 / 0 except Exception as e:logger.error(e)class LogDemo(object): @staticmethod def log_test():logger.warning(’warning log test’)

# log_test.pydef main(): setup_logging() logger = logging.getLogger(’server’) logger.debug(’debug log test’) logger.info(’info log test’) logger.warning(’warning log test’) logger.error(’error log test’) # 日志在其他模塊中使用演示 import log_demo log_demo.log_test1() log_demo.log_test2() log_demo.LogDemo.log_test()if __name__ == ’__main__’: main() 日志效果展示

運行 log_test.py 結果如下

控制臺信息

如何在Python項目中引入日志

全部日志配置文件信息

如何在Python項目中引入日志

錯誤日志文件信息

如何在Python項目中引入日志

源代碼

源代碼已上傳到 GitHub LogSetupDemo,歡迎大家來訪。

以上就是如何在Python項目中引入日志的詳細內容,更多關于python 項目引入日志的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美一区二区三区激情视频| 国产欧美午夜| 亚洲最新av| 久久福利影视| 欧美日韩国产高清| 日韩午夜电影| 日韩精品一二三区| 亚洲综合婷婷| 日本aⅴ免费视频一区二区三区| 日本强好片久久久久久aaa| 日韩动漫一区| 欧美激情日韩| 极品av在线| 久久婷婷久久| 日韩一区二区久久| 综合色就爱涩涩涩综合婷婷| 日本视频一区二区| 久久国产人妖系列| 精品久久福利| 99久久夜色精品国产亚洲1000部| 欧美日韩精品一区二区视频| 国产精品美女久久久| 婷婷成人av| 精品国产一区二区三区噜噜噜| 中文字幕成在线观看| 尤物精品在线| 欧美精品中文| 伊人久久av| 在线综合亚洲| 国产亚洲高清在线观看| 欧美xxxx中国| 影音国产精品| 日本一区中文字幕| 免费一级欧美片在线观看网站| 欧美gv在线| 美日韩精品视频| 国产伦乱精品| 成人台湾亚洲精品一区二区| 欧美另类综合| 日韩中文在线电影| 奇米狠狠一区二区三区| 清纯唯美亚洲综合一区| 日韩欧美一区免费| 卡一卡二国产精品| 婷婷综合电影| 中文字幕av亚洲精品一部二部 | 日韩三级一区| av在线最新| 久久久久久色| 麻豆精品网站| 玖玖精品视频| 最新亚洲一区| 69堂精品视频在线播放| 久久只有精品| 午夜日韩在线| 久久xxx视频| 狠狠干综合网| 国产成人免费| 亚洲精品伦理| 久久久精品网| 欧美亚洲自偷自偷| 麻豆91精品91久久久的内涵| 青草国产精品| 欧美黄色一区二区| 日韩影院精彩在线| 国产探花一区| 国产日韩欧美一区在线| 影音国产精品| 国产精品久久久一区二区| 欧美va天堂在线| 国产精品传媒麻豆hd| 黄色日韩在线| 成人污污视频| 日韩美女国产精品| 青青久久av| 欧美国产先锋| 亚州av乱码久久精品蜜桃| 国产高清日韩| 亚洲在线久久| 国产精品7m凸凹视频分类| 久久精品国产亚洲一区二区三区| 日韩中文字幕亚洲一区二区va在线| 精品福利久久久| 日本三级亚洲精品| 久久午夜精品一区二区| 亚洲精品88| 国产精品色在线网站| 在线看片日韩| 女同性一区二区三区人了人一| 福利一区二区免费视频| 国产美女久久| 亚洲日本在线观看视频| 免费视频一区三区| 不卡专区在线| 国产精品久久久久久久久免费高清 | 欧美日韩视频免费观看| 国产精品任我爽爆在线播放| 亚洲欧美日本日韩| 欧美亚洲国产精品久久| 成人在线丰满少妇av| 911亚洲精品| 蜜桃视频一区二区三区在线观看| 婷婷综合在线| 欧美日韩国产一区二区三区不卡| 日韩中文在线电影| 正在播放日韩精品| 一区二区精品伦理...| 国产一区二区久久久久| 国产精品66| 国产精品久久久亚洲一区| 欧美日韩夜夜| 欧美日一区二区三区在线观看国产免| 亚洲色图国产| 亚洲三区欧美一区国产二区| 香蕉精品999视频一区二区| 香蕉精品久久| 欧美成人午夜| 欧美日韩日本国产亚洲在线 | 亚洲免费观看高清完整版在线观| 国产精品视区| 国产婷婷精品| 蜜臀久久久久久久| 蜜桃传媒麻豆第一区在线观看 | 日本一区中文字幕| 日韩高清欧美激情| 日本不卡高清| 日韩精品1区2区3区| 日本va欧美va瓶| 日韩精品成人| 国产精品美女久久久久久不卡| 久久99久久久精品欧美| 国产成人久久| 99久久www免费| 精品1区2区3区4区| 亚洲午夜久久| 国产情侣一区| 国产精品久久久久久久久久10秀| 日韩免费高清| 伊人久久婷婷| 亚洲精品精选| 少妇精品久久久一区二区| 另类中文字幕国产精品| 国产精品外国| 国产欧美亚洲一区| 日韩av免费| 男女性色大片免费观看一区二区| 久久精品av麻豆的观看方式| 麻豆国产91在线播放| 日韩激情一区| 国产精品久久久久久av公交车| 97国产成人高清在线观看| 在线视频观看日韩| 欧美久久亚洲| 午夜久久福利| 亚洲少妇一区| 免费在线成人| 国产精品99一区二区三区| 亚洲精品黄色| 欧美成人a交片免费看| 欧美日韩中出| 国产乱码精品一区二区三区四区| 久久精品三级| 国内精品99| 日韩一区二区三区精品| 精品一区二区男人吃奶| 日韩精品一卡| 亚洲最新av| 国产不卡一区| 日韩av有码| 成人福利av| 麻豆国产欧美一区二区三区| 国产一区日韩一区| 亚洲精品一级二级| 国产三级一区| 尹人成人综合网| 久久精品二区亚洲w码| 日韩在线成人| 亚洲免费毛片| 亚洲精品一区二区妖精| 一区二区小说| 三级精品视频| 91精品婷婷色在线观看| 国产字幕视频一区二区| 九一成人免费视频| 久久亚洲精品中文字幕蜜潮电影| 日韩在线精品| 久久免费精品| 亚洲精品**中文毛片| 久久久国产精品一区二区中文| 日韩影院二区| 亚洲一级二级| 国产在线观看91一区二区三区| 亚洲精品高潮| 日韩av午夜在线观看| 中文在线中文资源| 美女精品网站| 91日韩欧美| 日本aⅴ免费视频一区二区三区| 亚洲www免费| 国产精品久久久一区二区|