Python logging模組的使用
logging是Python的標準庫,不需要我們安裝
import logging
logging.info("這是一個普通的資訊")
logging.debug("這是一個debug資訊")
logging.warning("這是警告資訊")
logging.error("出錯了,兄弟")
logging.critical("崩潰了")
結果如下:
可以看到,只有waring以上的等級列印了出來,因為每個日誌的等級是不一樣的
如何記錄錯誤
- 我們一般使用tyr except時錯誤的日誌顯示出來
- 示例如下:
def old_function():
try:
1/0
logging.info("這個沒有問題")
except Exception as e:
logging.error(e)
logging.warning("這個方法在下個版本中會被拋棄")
return "hello"
# 我們一般使用tyr except時錯誤的日誌顯示出來
if __name__ == '__main__':
old_function()
結果如下:
如果我們在裡面新增raise e 的話,程式會在raise的部分停止下來
def old_function():
try:
1/0
logging.info("這個沒有問題")
except Exception as e:
logging.error(e)
raise e #程式會在raise的部分停下來
logging.warning("這個方法在下個版本中會被拋棄")
return "hello"
# 我們一般使用tyr except時錯誤的日誌顯示出來
if __name__ == '__main__':
old_function()
結果如下:
###日誌的組成部分
接下來,我們學習日誌的各個部分
例子如下:
import logging
# 初始化logger收集器,先寫日記本的名字
logger = logging.getLogger("日記本的名字:我的名字") #其實這部分內容,就是上一部分列印出來的root
# 設定收集器的級別
logger.setLevel('DEBUG')
# 筆的預設級別是warning,預設是使用控制檯輸出
# console_output = logging.StreamHandler()
# 我們也可以放到file裡面
file_output = logging.FileHandler('log.txt')
# 新增handle
logger.addHandler(file_output)
logger.error("出錯了,兄弟")
logger.critical("崩潰了")
結果:
這裡面注意一下級別的問題。
如下程式碼,收集器的級別是debug,但是筆的級別是warnin,我們看一下結果。
import logging
# 初始化logger收集器,先寫日記本的名字
logger = logging.getLogger("日記本的名字:我的名字") #其實這部分內容,就是上一部分列印出來的root
# 設定收集器的級別
logger.setLevel('DEBUG') #低於debug型別的收集器是輸出不出來的。
# 筆的預設級別是warning,預設是使用控制檯輸出
# console_output = logging.StreamHandler()
# 我們也可以放到file裡面
handle = logging.FileHandler('log.txt')
handle.setLevel("WARNING")
# 新增handle
logger.addHandler(handle)
logger.info("出錯了,兄弟")
logger.critical("崩潰了")
結果:
結果中,就顯示了warning以上的等級。
我們就這樣記憶,筆記本有一個許可權
然後筆輸出還是會有一個許可權,這個就相當於一個漏斗一樣。
但是一般情況下,我們設定成一個級別就可以了
- 當然,日誌模組你可以自定義多個收集器,但是一般沒有必要,你只需要定義一個模組就可以了
最後一部分是函式的封裝
- 這裡就直接給封裝好的函式了,可以自行研究,其實,直接寫成def的函式形式也是可以的
import logging
class LoggerHandler():
def __init__(self,
name = "root",
level = 'DEBUG',
file = None,
format = '%(asctime)s-%(name)s-%(levelname)s-%(message)s-%(lineno)s'
):
logger = logging.getLogger(name)
#設定級別
logger.setLevel(level)
fmt = logging.Formatter(format)
# 初始化處理器
if file:
file_handle = logging.FileHandler(file)
file_handle.setLevel(level)
logger.addHandler(file_handle)
file_handle.setFormatter(fmt)
stream_handler = logging.StreamHandler()
# 設定handle 的級別
stream_handler.setLevel(level)
logger.addHandler(stream_handler)
stream_handler.setFormatter(fmt)
self.logger = logger
def debug(self,msg):
return self.logger.debug(msg)
def error(self,msg):
return self.logger.error(msg)
def critical(self,msg):
return self.logger.critical(msg)
def info(self,msg):
return self.logger.info(msg)
if __name__ == '__main__':
logger = LoggerHandler(file="log1.txt")
logger.debug("hello world")
- 第二種封裝方法(更推薦)
'''
繼承的辦法
因為,從封裝1的那個py檔案中可以看到,下面呼叫的函式都是繼承的別的類,那麼我們直接把那個類拿過來使用就可以了
'''
import logging
class LoggerHandler(logging.Logger):
def __init__(self,
name = "root",
level = 'DEBUG',
file = None,
format = '%(asctime)s-%(name)s-%(levelname)s-%(message)s-%(lineno)s'
):
# logger = logging.gerLogger(name)
super().__init__(name)
#logger = logging.getLogger(name)
#設定級別
self.setLevel(level)
fmt = logging.Formatter(format)
# 初始化處理器
if file:
file_handle = logging.FileHandler(file)
file_handle.setLevel(level)
self.addHandler(file_handle)
file_handle.setFormatter(fmt)
stream_handler = logging.StreamHandler()
# 設定handle 的級別
stream_handler.setLevel(level)
self.addHandler(stream_handler)
stream_handler.setFormatter(fmt)
if __name__ == '__main__':
logger = LoggerHandler()
logger.debug("hello world")
相關文章
- python的logging模組Python
- python logging模組使用總結Python
- Python:使用logging模組記錄日誌Python
- Python學習——logging模組Python
- Python強大的日誌模組loggingPython
- python常用模組補充hashlib configparser logging,subprocess模組Python
- hashlib、logging模組
- python之logging日誌模組詳解Python
- Python之logging模組相關介紹Python
- 模組學習之logging模組
- 【python介面自動化】- logging日誌模組Python
- 『無為則無心』Python日誌 — 65、日誌模組logging的使用Python
- python logging模組註冊流程(以logging.config.dictConfig流程為例)Python
- CANoe中Logging模組使用方法及妙招⭐
- logging模組配置筆記筆記
- 日誌記錄模組logging
- python常識系列08-->logging模組基礎入門Python
- Python–logging模組不同級別寫入到不同檔案Python
- Python中模組的使用Python
- Python 中argparse模組的使用Python
- Python模組 adorner 的使用示例Python
- 『無為則無心』Python日誌 — 64、Python日誌模組logging介紹Python
- .Net Core Logging模組原始碼閱讀原始碼
- python非同步asyncio模組的使用Python非同步
- Python中yaml模組的使用教程PythonYAML
- 【python基礎】os模組的使用Python
- PyCon 2018: 利用logging模組輕鬆地進行Python日誌記錄Python
- 『無為則無心』Python日誌 — 67、logging日誌模組處理流程Python
- Python paramiko模組的安裝與使用Python
- python中的itertools模組簡單使用Python
- python inspect模組簡單使用Python
- python 模組:itsdangerous 模組Python
- Python模組:time模組Python
- Python3 pickle模組的使用詳解Python
- Python 內建logging 使用詳細講Python
- Python模組之urllib模組Python
- python模組之collections模組Python
- python的os模組Python