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