摘要:它的構(gòu)造函數(shù)是其中參數(shù)是一個(gè)文件對象。它的構(gòu)造函數(shù)是是文件名,必須指定一個(gè)文件名。用于指定日志文件的最大文件大小。它的構(gòu)造函數(shù)是其中參數(shù)和參數(shù)和具有相同的意義。表示時(shí)間間隔的單位,不區(qū)分大小寫。可能沒有線程名。
0.前置說明
1.運(yùn)行環(huán)境:Win7虛擬機(jī)、python2.7(anacoda版)
2.本文大部分內(nèi)容引用此參考文獻(xiàn):http://my.oschina.net/leejun2005/blog/126713
1.基本元素說明:Logger:用于輸出的日志的總對象
Handlers:用來指定log的輸出方式
Formatters:設(shè)置日志信息的結(jié)構(gòu)和內(nèi)容格式,默認(rèn)的時(shí)間格式為%Y-%m-%d %H:%M:%S
Filter:過濾器,用來過濾的輸出內(nèi)容(如:只輸出debug以上的內(nèi)容)
Logger 常用函數(shù)LOG=logging.getLogger(”chat.gui”)
Logger.setLevel(lel):指定最低的日志級別,低于lel的級別將被忽略。debug是最低的內(nèi)置級別,critical為最高
Logger.addFilter(filt)、Logger.removeFilter(filt):添加或刪除指定的filter
Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或刪除指定的handler
Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以設(shè)置的日志級別
Logger.log("debug","This is a bug"):可以通過這個(gè)函數(shù)直接輸出內(nèi)容并選擇對應(yīng)的告警級別
內(nèi)置級別名稱 | 對應(yīng)數(shù)字級別 |
---|---|
NOTSET | 0 |
DEBUG | 10 |
INFO | 20 |
WARNING | 30 |
ERROR | 40 |
CRITICAL | 50 |
Handler.setLevel(lel):指定被處理的信息級別,低于lel級別的信息將被忽略
Handler.setFormatter():給這個(gè)handler選擇一個(gè)格式
Handler.addFilter(filt)、Handler.removeFilter(filt):新增或刪除一個(gè)filter對象
2.Handler種類logging.StreamHandler
使用這個(gè)Handler可以向類似與sys.stdout或者sys.stderr的任何文件對象(file object)輸出信息。
它的構(gòu)造函數(shù)是:StreamHandler([strm])
其中strm參數(shù)是一個(gè)文件對象。
默認(rèn)是sys.stderr
logging.FileHandler
和StreamHandler類似,用于向一個(gè)文件輸出日志信息。不過FileHandler會(huì)幫你打開這個(gè)文件。
它的構(gòu)造函數(shù)是:FileHandler(filename[,mode])
filename是文件名,必須指定一個(gè)文件名。
mode是文件的打開方式。
默認(rèn)是’a",即添加到文件末尾。
logging.handlers.RotatingFileHandler
這個(gè)Handler類似于上面的FileHandler,但是它可以管理文件大小。當(dāng)文件達(dá)到一定大小之后,它會(huì)自動(dòng)將當(dāng)前日志文件改名,然后創(chuàng)建一個(gè)新的同名日志文件繼續(xù)輸出。比如日志文件是chat.log。當(dāng)chat.log達(dá)到指定的大小之后,RotatingFileHandler自動(dòng)把 文件改名為chat.log.1。不過,如果chat.log.1已經(jīng)存在,會(huì)先把chat.log.1重命名為chat.log.2。。。最后重新創(chuàng)建 chat.log,繼續(xù)輸出日志信息。
它的構(gòu)造函數(shù)是:RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])
其中filename和mode兩個(gè)參數(shù)和FileHandler一樣。
maxBytes用于指定日志文件的最大文件大小。如果maxBytes為0,意味著日志文件可以無限大,這時(shí)上面描述的重命名過程就不會(huì)發(fā)生。
backupCount用于指定保留的備份文件的個(gè)數(shù)。比如,如果指定為2,當(dāng)上面描述的重命名過程發(fā)生時(shí),原有的chat.log.2并不會(huì)被更名,而是被刪除。
logging.handlers.TimedRotatingFileHandler
這個(gè)Handler和RotatingFileHandler類似,不過,它沒有通過判斷文件大小來決定何時(shí)重新創(chuàng)建日志文件,而是間隔一定時(shí)間就 自動(dòng)創(chuàng)建新的日志文件。重命名的過程與RotatingFileHandler類似,不過新的文件不是附加數(shù)字,而是當(dāng)前時(shí)間。它的構(gòu)造函數(shù)是:
TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])
其中filename參數(shù)和backupCount參數(shù)和RotatingFileHandler具有相同的意義。
interval是時(shí)間間隔。
when參數(shù)是一個(gè)字符串。表示時(shí)間間隔的單位,不區(qū)分大小寫。它有以下取值:
S 秒
M 分
H 小時(shí)
D 天
W 每星期(interval==0時(shí)代表星期一)
midnight 每天凌晨
logging.handlers.SocketHandler
logging.handlers.DatagramHandler
以上兩個(gè)Handler類似,都是將日志信息發(fā)送到網(wǎng)絡(luò)。不同的是前者使用TCP協(xié)議,后者使用UDP協(xié)議。它們的構(gòu)造函數(shù)是:
Handler(host, port)
其中host是主機(jī)名,port是端口名
logging.handlers.SysLogHandler
logging.handlers.NTEventLogHandler
logging.handlers.SMTPHandler
logging.handlers.MemoryHandler
logging.handlers.HTTPHandler
Formatters參數(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)前時(shí)間,用UNIX標(biāo)準(zhǔn)的表示時(shí)間的浮點(diǎn)數(shù)表示 |
%(relativeCreated)d | 輸出日志信息時(shí)的,自Logger創(chuàng)建以 來的毫秒數(shù) |
%(asctime)s | 字符串形式的當(dāng)前時(shí)間。默認(rèn)格式是 “2003-07-08 16:49:45,896”。逗號后面的是毫秒 |
%(thread)d | 線程ID。可能沒有 |
%(threadName)s | 線程名。可能沒有 |
%(process)d | 進(jìn)程ID。可能沒有 |
%(message)s | 用戶輸出的消息 |
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/37565.html
Python Logging原來真的遠(yuǎn)比我想象的要復(fù)雜很多很多,學(xué)習(xí)路線堪比git。但是又繞不過去,alternatives又少,所以必須要予以重視,踏踏實(shí)實(shí)認(rèn)認(rèn)真真的來好好學(xué)學(xué)才行。 學(xué)習(xí)Logging的目的:簡單腳本還好,print足夠。但是稍微復(fù)雜點(diǎn),哪怕是三四個(gè)文件加起來兩三百行代碼,調(diào)試也開始變復(fù)雜起來了。再加上如果是后臺(tái)長期運(yùn)行的那種腳本,運(yùn)行信息的調(diào)查更是復(fù)雜起來。一開始我還在各種查...
摘要:簡介日志在編程中是十分重要,可以幫助我們跟蹤事件應(yīng)用的運(yùn)行情況查問題統(tǒng)計(jì)數(shù)據(jù)等。在記錄日志時(shí),通常表示某件事情的發(fā)生。基本使用直接打印運(yùn)行之后看到的是因?yàn)槟J(rèn)等級是所以是不會(huì)顯示的。 簡介 日志在編程中是十分重要,可以幫助我們跟蹤事件、應(yīng)用的運(yùn)行情況、查問題、統(tǒng)計(jì)數(shù)據(jù)等。在記錄日志時(shí),通常表示某件事情的發(fā)生。 python 中 logging 模塊提供記錄的基礎(chǔ)方法: debug, i...
摘要:一監(jiān)控所有的請求如何實(shí)現(xiàn)系統(tǒng)監(jiān)控,自動(dòng)發(fā)送錯(cuò)誤日志的郵件呢只需配置配置文件即可。設(shè)置發(fā)送郵件配置信息郵件會(huì)發(fā)送到設(shè)定的郵件列表中。 showImg(https://segmentfault.com/img/remote/1460000015327475); 一、監(jiān)控所有的request請求 如何實(shí)現(xiàn)系統(tǒng)監(jiān)控,自動(dòng)發(fā)送錯(cuò)誤日志的郵件呢? 只需配置配置settings文件即可。 1.設(shè)置發(fā)...
摘要:每一條日志記錄也包含級別,代表對應(yīng)消息的嚴(yán)重程度。即格式化器,主要功能是確定最終輸出的形式和內(nèi)容。最好是日志能夠按自然天進(jìn)行記錄和分割。 上一章學(xué)習(xí)了自動(dòng)化測試,很好,現(xiàn)在我們可以絞盡腦汁寫出一份全面的測試,來保證代碼永遠(yuǎn)健康了。 話雖如此,但是作為一個(gè)獨(dú)立開發(fā)者很難寫出真正全面的測試代碼。這是因?yàn)橛脩粼谑褂媚愕木W(wǎng)站時(shí)可不會(huì)循規(guī)蹈矩,而是會(huì)以各種怪異的姿勢瀏覽網(wǎng)頁、上傳數(shù)據(jù)。但這也不是...
摘要:類似這樣執(zhí)行打印最終輸出的日志要想在命令行模式工作的時(shí)候,查看它的編譯進(jìn)度,霖哥一般會(huì)遠(yuǎn)程跑進(jìn)執(zhí)行編譯工作的機(jī)器,然后用命令,把它的日志實(shí)時(shí)輸出來嗯,這相當(dāng)?shù)牟豢茖W(xué)啊。我是霖哥,一個(gè)商學(xué)院畢業(yè)的程序員,一個(gè)游戲開發(fā)工程師。 showImg(https://segmentfault.com/img/remote/1460000008856262); 如果你使用過Unity命令行模式(ba...
閱讀 1263·2021-11-23 09:51
閱讀 2639·2021-09-03 10:47
閱讀 2234·2019-08-30 15:53
閱讀 2414·2019-08-30 15:44
閱讀 1376·2019-08-30 15:44
閱讀 1195·2019-08-30 10:57
閱讀 1925·2019-08-29 12:25
閱讀 1088·2019-08-26 11:57