Python logging 学习
生活随笔
收集整理的這篇文章主要介紹了
Python logging 学习
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
基本用法: import logging#初始化logger 對(duì)象
logger = logging.getLogger("main")
#設(shè)置logger對(duì)象基礎(chǔ)級(jí)別,后面的handle的級(jí)別是基于此級(jí)別上的:及如果基礎(chǔ)級(jí)別為 warning,則后面的handle最小級(jí)別就是handle了;如果基礎(chǔ)是info,后面handle的級(jí)別是warning,則是warning
logger.setLevel(logging.WARNING)# 建立一個(gè)filehandler來把日志記錄在文件里,級(jí)別為debug以上
filehandle = logging.FileHandler("test.log")
filehandle.setLevel(logging.DEBUG)# 建立一個(gè)streamhandler來把日志打在CMD窗口上,級(jí)別為info以上
consolehandle = logging.StreamHandler()
consolehandle.setLevel(logging.INFO)# 分別為兩個(gè)handle設(shè)置日志格式
formatter = logging.Formatter("%(asctime)s - %(name)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s")
filehandle.setFormatter(formatter)
consolehandle.setFormatter(formatter)#將兩個(gè)handler添加在logger對(duì)象中
logger.addHandler(consolehandle)
logger.addHandler(filehandle)# 開始打日志
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message") 注:
1. logger:提供日志接口,供應(yīng)用代碼使用。logger最長用的操作有兩類:配置和發(fā)送日志消息。可以通過logging.getLogger(name)獲取logger對(duì)象,如果不指定name則返回root對(duì)象,多次使用相同的name調(diào)用getLogger方法返回同一個(gè)logger對(duì)象。
2. handler:將日志記錄(log record)發(fā)送到合適的目的地(destination),比如文件,socket等。一個(gè)logger對(duì)象可以通過addHandler方法添加0到多個(gè)handler,每個(gè)handler又可以定義不同日志級(jí)別,以實(shí)現(xiàn)日志分級(jí)過濾顯示。
3. filter:提供一種優(yōu)雅的方式?jīng)Q定一個(gè)日志記錄是否發(fā)送到handler。
4. formatter:指定日志記錄輸出的具體格式。formatter的構(gòu)造方法需要兩個(gè)參數(shù):消息的格式字符串和日期字符串,這兩個(gè)參數(shù)都是可選的。
5. format:定義了最終log信息的順序,結(jié)構(gòu)和內(nèi)容: %(message)s', '%Y-%m-%d %H:%M:%S' %(name)s Logger的名字 %(levelname)s 文本形式的日志級(jí)別 %(message)s 用戶輸出的消息 %(asctime)s 字符串形式的當(dāng)前時(shí)間。默認(rèn)格式是 “2003-07-08 16:49:45,896”。逗號(hào)后面的是毫秒 %(levelno)s 數(shù)字形式的日志級(jí)別 %(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)前時(shí)間,用UNIX標(biāo)準(zhǔn)的表示時(shí)間的浮 點(diǎn)數(shù)表示 %(relativeCreated)d 輸出日志信息時(shí)的,自Logger創(chuàng)建以 來的毫秒數(shù) %(thread)d 線程ID。可能沒有 %(threadName)s 線程名。可能沒有 %(process)d 進(jìn)程ID。可能沒有 =========================================================== 當(dāng)一個(gè)項(xiàng)目比較大的時(shí)候,不同的文件中都要用到Log,可以考慮將其封裝為一個(gè)類來使用: class Logger(object):def __init__(self,loggerName,fileLog):basic_level = logging.DEBUGconsole_level = logging.INFOfile_level = logging.INFOformatter = logging.Formatter("%(asctime)s - %(name)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s")self.logger = logging.getLogger(loggerName)self.logger.setLevel(basic_level)file_handle = logging.FileHandler(fileLog)file_handle.setLevel(file_level)file_handle.setFormatter(formatter)console_handle = logging.StreamHandler()console_handle.setLevel(console_level)console_handle.setFormatter(formatter)self.logger.addHandler(file_handle)self.logger.addHandler(console_handle)def debug(self, message):self.logger.debug(message)def info(self, message):self.logger.info(message)def warn(self, message):self.logger.warn(message)def error(self, message):self.logger.error(message)def critical(self, message):self.logger.critical(message)if __name__ == '__main__':import datetimedt = datetime.datetime.now()logfilename = "../logs/test_%s.log" % dt.strftime('%Y%m%d')logger = Logger("Python.utils.Log",logfilename)logger.debug("this is a test for debug")logger.info("this is a test for info")logger.warn("this is a test for warn")logger.error("this is a test for error") 在另外一個(gè) .py 文件里,只要導(dǎo)入這個(gè)模塊,并實(shí)例化類 Logger 就可以在整個(gè)project 范圍內(nèi) 輸出日志了。 另外注意一點(diǎn)的是:自定義Logger類可以和 logging 混合運(yùn)用,也可以在整個(gè)project 范圍內(nèi)用。但有一點(diǎn)要注意的是 當(dāng)自定義Logger類和 logging 混用,在實(shí)例化logger時(shí) ( = logging.getLogger(loggerName) ) loggerName 要有一個(gè)規(guī)范: 就是必需有層級(jí)關(guān)系,譬如 按照 project.package.module的 形式, 當(dāng)在不同的 py文件 中 loggerName 中的 project 是一樣時(shí), 都可以用logger 來輸出日志。譬如 在 main.py 中 = logging.getLogger("pytest.test.main") 以及另外一個(gè)文件中的 =logging.getLogger("pytest.utils.ApiTestRunner") 參考: http://www.jb51.net/article/88449.htm轉(zhuǎn)載于:https://www.cnblogs.com/tomweng/p/6609959.html
總結(jié)
以上是生活随笔為你收集整理的Python logging 学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 团队开发冲刺第二阶段8
- 下一篇: [20170310]关于在线日志与归档3