Python基礎 模組補充

2021-08-19 19:26:46 字數 4116 閱讀 4982

logging模組:

方式一:僅僅只能在控制台(stream)或是檔案中列印日誌資訊

1.日誌等級(由低到高)

logging.debug('debug message')

logging.info('info message')

logging.warning('warning message')

logging.error('error message')

logging.critical('critical message')

2.日誌基本資訊配置

logging.basicconfig(

level=logging.debug, #預設日誌等級是warning,這個可以對日誌預設等級進行修改

#預設把日誌資訊列印到控制台上(預設引數是stream),這個可以把日誌資訊列印到檔案中。

#即這個方法做不到把之日誌資訊同時列印到控制台與檔案中,如果同時設定stream與filemane,則只有filename起作用!

filename="logger.log",

filemode="w", #這個可以調整日誌列印資訊的模式,預設是追加,即a!一般情況下也應該是a!

#預設只是列印日誌訊息,下述可以配置列印的資訊格式

# 列印時間 列印檔案名 列印行號 列印日誌訊息

#注意:檔名是執行列印日誌訊息的檔案,行號也是列印日誌訊息所在執行檔案中的行號

format="%(asctime)s %(filename)s[%(lineno)d]  %(message)s" )

方式二:可以在控制台與檔案中同時列印日誌訊息

import logging

def logger():

#獲取logger物件

logger=logging.getlogger()

#獲取可以向檔案中列印資訊的物件,引數是把日誌資訊列印到此檔案中

fh=logging.filehandler("test_log")

#獲取可以向控制台列印資訊的物件

ch=logging.streamhandler()

#設定列印日誌資訊的格式

fm=logging.formatter("%(asctime)s  %(message)s")

#把列印格式給到檔案操作與控制台操作的兩個物件

fh.setformatter(fm)

ch.setformatter(fm)

#把兩個物件加到logger物件中

logger.addhandler(fh)

logger.addhandler(ch)

#設定列印訊息預設的等級(預設是warning)

logger.setlevel("debug")

return logger

logger=logger()

logger.debug("debug")

logger.info("info")

logger.warning("warning")

logger.error("error")

logger.critical("critical")

注意:1.注意:*getlogger('mylogger'),mylogger是root的兒子,如果方法不加引數,則預設建立root的logger物件!

*上述方法的引數值是唯一的,若有重複的,則後者覆蓋前者!

logger1 = logging.getlogger('mylogger')

logger1.setlevel(logging.debug)

logger2 = logging.getlogger('mylogger')

logger2.setlevel(logging.warning)

fh=logging.filehandler("test_log")

ch=logging.streamhandler()

logger1.addhandler(fh)

logger1.addhandler(ch)

logger2.addhandler(fh)

logger2.addhandler(ch)

logger1.debug('logger1 debug message')

logger1.info('logger1 info message')

logger1.warning('logger1 warning message')

logger1.error('logger1 error message')

logger1.critical('logger1 critical message')

logger2.debug('logger2 debug message')

logger2.info('logger2 info message')

logger2.warning('logger2 warning message')

logger2.error('logger2 error message')

logger2.critical('logger2 critical message')

2.注意:如果想要設定root孫子對應的logger物件,可以logger = logging.getlogger('mylogger.sunzi').

即通過.的形式建立不同級別的日誌物件!(可以理解為以root為根節點的樹)

import logging

logger=logging.getlogger() #建立root的logger物件

logger1 = logging.getlogger('mylogger') #建立root的孩子mylogger

logger1.setlevel(logging.debug)

fh=logging.filehandler("test_log-new")

ch=logging.streamhandler()

logger.addhandler(ch)

logger.addhandler(fh)

logger1.addhandler(fh)

logger1.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')

logger1.debug('logger1 debug message')

logger1.info('logger1 info message')

logger1.warning('logger1 warning message')

logger1.error('logger1 error message')

logger1.critical('logger1 critical message')

上述**執行結果:

#*由於logger沒有設定level,所有會列印warning以下的三條資料

logger warning message

logger error message

logger critical message

#如果mylogger檢測到root對應的logger有在工作,則會中復列印2次!(次數取決與root的關係)

#這裡面的工作指的是只要把fh與ch物件加到logger中,就算在工作了!但是如果只是建立父類物件不算是工作!

#也就是注釋掉把fh與ch物件加到logger中對應**,則logger1就不會列印2次了!

logger1 debug message

logger1 debug message

logger1 info message

logger1 info message

logger1 warning message

logger1 warning message

logger1 error message

logger1 error message

logger1 critical message

logger1 critical message

python充值模組 Python 模組補充

subprocess stdout 標準輸出 stdin 標準輸入 stderr 標準錯誤輸出 subprocess是os.system的公升級版,可以在python中執行shell命令,並且可以通過管道獲取stdout stdin stderr 1 importsubprocess2 這樣相當於執...

python基礎補充

import random print random.choice range 10 和from random import choice print choice range 10 第一種方法 將模組的名字設定為乙個隱含在名字空間裡的全域性變數,這樣就好像訪問全域性屬性那樣訪問choice函式 第...

python基礎補充

import random print random.choice range 10 和from random import choice print choice range 10 第一種方法 將模組的名字設定為乙個隱含在名字空間裡的全域性變數,這樣就好像訪問全域性屬性那樣訪問choice函式 第...