溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python包和logging日志的示例分析

發(fā)布時間:2020-11-10 14:12:35 來源:億速云 閱讀:185 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)python包和logging日志的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

python包和logging日志

一、包

包:文件夾下具有__init__.py文件就是一個包,包用來管理多個模塊

包的結(jié)構(gòu)如下:

bake            
    ├── __init__.py       
    ├── api               
        ├── __init__.py
        ├── policy.py
        └── versions.py
  ├── cmd             
    ├── __init__.py
    └── manage.py
  └── db                
      ├── __init__.py
      └── models.py

在bake的同級創(chuàng)建一個test.py導(dǎo)入policy.py:

import bake.api.policy
bake.api.policy.get()
#導(dǎo)入的名字太長了,可以起別名
import bake.api.policy as p
p.get()
#from 導(dǎo)入在__init__.py修改
from . import policy
#我們需要在policy文件中向sys.path添加了當(dāng)前的路徑
import os
import sys
sys.path.insert(os.path.dirname(__file__))
#print(__file__)查看一下
#使用__all__,在__init__.py中
__all__ = ["policy"]
#或
from . import policy

總結(jié):

import 包.包.包

from 包.包.包 import 模塊

路徑:

絕對:從在外層開始導(dǎo)入

相對:從當(dāng)前開始(.)導(dǎo)入或者從父級(..)導(dǎo)入

使用相對路徑時必須在包的最外層且同級

from 包 import *

需要在__init__.py做操作

python2:import文件夾(沒有__init__.py)會報錯

python3:import文件夾(沒有__init__.py)不會報錯

二、logging模塊

logging模塊用于記錄軟件的各種狀態(tài),交易記錄,錯誤記錄,登錄記錄……

1.函數(shù)式簡單配置:

import logging
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')

默認(rèn)情況下python的logging模塊將日志打印到了標(biāo)準(zhǔn)輸出中,且只顯示了大于等于WARNING級別的日志,證明默認(rèn)的級別為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("請輸入數(shù)字:"))
except Exception as e:
    logging.warning("e")
logging.error('error message')
logging.critical('critical message')

basicConfig()函數(shù)中可通過具體參數(shù)來更改logging模塊默認(rèn)行為,可用參數(shù)有:

filename:用指定的文件名創(chuàng)建FiledHandler,這樣日志會被存儲在指定的文件中。

filemode:文件打開方式,在指定了filename時使用這個參數(shù),默認(rèn)值為“a”還可指定為“w”。

format:指定handler使用的日志顯示格式。

datefmt:指定日期時間格式。

level:設(shè)置記錄日志的級別

stream:用指定的stream創(chuàng)建StreamHandler??梢灾付ㄝ敵龅?/p>

sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默認(rèn)為sys.stderr。若同時列出了filename和stream兩個參數(shù),則stream參數(shù)會被忽略。

format參數(shù)中可能用到的格式化串:

%(name)s Logger的名字

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

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

%(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 當(dāng)前時間,用UNIX標(biāo)準(zhǔn)的表示時間的浮 點數(shù)表示

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

%(asctime)s 字符串形式的當(dāng)前時間。默認(rèn)格式是 “2003-07-08 16:49:45,896”。逗號后面的是毫秒

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

%(threadName)s 線程名??赡軟]有

%(process)d 進(jìn)程ID??赡軟]有

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

3.logger對象配置(中配版)

import logging
logger = logging.getLogger()
# 創(chuàng)建一個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)
# 設(shè)置記錄級別
fh.setFormatter(formatter)
# 使用自定義的格式化內(nèi)容
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')

關(guān)于python包和logging日志的示例分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI