您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關python包和logging日志的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
python包和logging日志
一、包
包:文件夾下具有__init__.py文件就是一個包,包用來管理多個模塊
包的結構如下:
bake ├── __init__.py ├── api ├── __init__.py ├── policy.py └── versions.py ├── cmd ├── __init__.py └── manage.py └── db ├── __init__.py └── models.py
在bake的同級創建一個test.py導入policy.py:
import bake.api.policy bake.api.policy.get() #導入的名字太長了,可以起別名 import bake.api.policy as p p.get() #from 導入在__init__.py修改 from . import policy #我們需要在policy文件中向sys.path添加了當前的路徑 import os import sys sys.path.insert(os.path.dirname(__file__)) #print(__file__)查看一下 #使用__all__,在__init__.py中 __all__ = ["policy"] #或 from . import policy
總結:
import 包.包.包
from 包.包.包 import 模塊
路徑:
絕對:從在外層開始導入
相對:從當前開始(.)導入或者從父級(..)導入
使用相對路徑時必須在包的最外層且同級
from 包 import *
需要在__init__.py做操作
python2:import文件夾(沒有__init__.py)會報錯
python3:import文件夾(沒有__init__.py)不會報錯
二、logging模塊
logging模塊用于記錄軟件的各種狀態,交易記錄,錯誤記錄,登錄記錄……
1.函數式簡單配置:
import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message')
默認情況下python的logging模塊將日志打印到了標準輸出中,且只顯示了大于等于WARNING級別的日志,證明默認的級別為WARNING
日志級別:CRITICAL > ERROR > WARNING > INFO > DEBUG
2.靈活配置日志級別,日志模式,輸入位置(低配版)
只能寫入日志,不能公屏輸出
import logging logging.basicConfig(level = logging.DEBUG, format = '%(astime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s', datefmt = '%Y-%m-%d %H:%M:%S', filename = 'test.log', filemode = 'a') dic = {"key":123} logging.debug(dic) num = 100 logging.info(f"用戶余額:{num - 50}") try: num = int(input("請輸入數字:")) except Exception as e: logging.warning("e") logging.error('error message') logging.critical('critical message')
basicConfig()函數中可通過具體參數來更改logging模塊默認行為,可用參數有:
filename:用指定的文件名創建FiledHandler,這樣日志會被存儲在指定的文件中。
filemode:文件打開方式,在指定了filename時使用這個參數,默認值為“a”還可指定為“w”。
format:指定handler使用的日志顯示格式。
datefmt:指定日期時間格式。
level:設置記錄日志的級別
stream:用指定的stream創建StreamHandler。可以指定輸出到
sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默認為sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略。
format參數中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 數字形式的日志級別
%(levelname)s 文本形式的日志級別
%(pathname)s 調用日志輸出函數的模塊的完整路徑名,可能沒有
%(filename)s 調用日志輸出函數的模塊的文件名
%(module)s 調用日志輸出函數的模塊名
%(funcName)s 調用日志輸出函數的函數名
%(lineno)d 調用日志輸出函數的語句所在的代碼行
%(created)f 當前時間,用UNIX標準的表示時間的浮 點數表示
%(relativeCreated)d 輸出日志信息時的,自Logger創建以 來的毫秒數
%(asctime)s 字符串形式的當前時間。默認格式是 “2003-07-08 16:49:45,896”。逗號后面的是毫秒
%(thread)d 線程ID。可能沒有
%(threadName)s 線程名。可能沒有
%(process)d 進程ID。可能沒有
%(message)s用戶輸出的消息
3.logger對象配置(中配版)
import logging logger = logging.getLogger() # 創建一個logger fh = logging.FileHandler('test.log',mode="a",encoding='utf-8') # 文件 ch = logging.StreamHandler() # 屏幕 formatter = logging.Formatter('%(asctime)s - %(name)s - %(filename)s - [line:%(lineno)d] - %(levelname)s - %(message)s') # 將屏幕和文件都是用以上格式 logger.setLevel(logging.DEBUG) # 設置記錄級別 fh.setFormatter(formatter) # 使用自定義的格式化內容 ch.setFormatter(formatter) logger.addHandler(fh) #logger對象可以添加多個fh和ch對象 logger.addHandler(ch) logger.debug('logger debug message') logger.info('logger info message') logger.warning('logger warning message') logger.error('logger error message') logger.critical('logger critical message')
關于python包和logging日志的示例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。