近來再弄一個小項目,已經到收尾階段了。但願加入寫log機制來增長程序出錯後的判斷分析。嘗試使用了python logging模塊。python
#-*- coding:utf-8 -*- import logging import sys class LogRecord(object): def __init__(self): self.mylogger = logging.getLogger('iplog') self.mylogger.setLevel(logging.WARNING) #建立一個handler,用於寫入日誌文件 self.fn = logging.FileHandler(sys.path[0]+'/iplog.log','a') #定義handler的輸出格式formatter self.formatter = logging.Formatter('%(asctime)s %(levelname)s %(filename)s[line:%(lineno)d] %(message)s') #定義handler的輸出格式 self.fn.setFormatter(self.formatter) #給mylogger添加handler self.mylogger.addHandler(self.fn) def GetLogObj(self): return self.mylogger
logging模塊使用起來也比較簡單。app
返回一個logger對象,若是沒有指定名字將返回root logger。函數
指定最低的日誌級別,可用的日誌級別有logging.DEBUG<logging.INFO<logging.WARNING<logging.ERRO<logging.CRITICAL。url
只有日誌等級大於或等於設置的日誌級別的日誌纔會被輸出。spa
建立一個handler,用於寫入日誌文件.也能夠建立一個StreamHandle控制檯輸出。還有不少Handle就你們自行進行擴展了。debug
定義handler的輸出格式formatter。輸出格式有不少。日誌
format參數中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 數字形式的日誌級別
%(levelname)s 文本形式的日誌級別
%(filename)s 調用日誌輸出函數的模塊的文件名
%(module)s 調用日誌輸出函數的模塊名
%(funcName)s 調用日誌輸出函數的函數名
%(lineno)d 調用日誌輸出函數的語句所在的代碼行
%(created)f 當前時間,用UNIX標準的表示時間的浮 點數表示
%(relativeCreated)d 輸出日誌信息時的,自Logger建立以 來的毫秒數
%(asctime)s 字符串形式的當前時間。默認格式是 「2003-07-08 16:49:45,896」。逗號後面的是毫秒
%(message)s用戶輸出的消息code
將輸出格式綁定到handle上。orm
將handle綁定到mylogger對象上。對象
接下來就直接調用mylogger.error or debug or warning or info.....,直接輸出到指定的log文件中了。可是要記得當前的self.mylogger.setLevel(logging.WARNING)是什麼?只要大於或者等於WARING的日誌等級纔會被寫入log文件中。
if status_first == -1:
self.mylogger.error("new_ipurl = %s,first download is failed!fail url save." % new_ipurl) self.failurllst.append(new_ipurl)
else:
self.mylogger.debug("new_ipurl = %s,download is success!" % new_ipurl)