首頁  >  文章  >  後端開發  >  python套件和logging日誌的相關介紹

python套件和logging日誌的相關介紹

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼轉載
2019-08-08 17:55:182254瀏覽

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)不會報錯誤

#相關推薦:《Python影片教學

二、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日誌的相關介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除