logging模塊是python內置的標準模塊,主要用於輸出程序的運行日誌。 能夠設置輸出日誌的等級,日誌保存路徑,日誌文件回滾等等。
import logging logging.basicConfig( level=logging.INFO, # 指定日誌的等級爲INFO format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" # 輸出的日誌格式 ) """ 日誌等級以下: DEBUG:調試過程當中使用DEBUG等級,如算法中每一個循環的中間狀態 INFO:處理請求或者狀態變化等平常事務 WARNING:發生很重要的事件,可是並非錯誤時,如用戶登陸密碼錯誤 ERROR:發生錯誤時,如IO操做失敗或者鏈接問題 CRITICAL:特別糟糕的事情,如內存耗盡、磁盤空間爲空,通常不多使用 FATAL:致命錯誤 """ """ 日誌格式以下: %(levelno)s:打印日誌級別的數值 %(levelname)s:打印日誌級別的名稱 %(pathname)s:打印當前執行程序的路徑,其實就是sys.argv[0] %(filename)s:打印當前執行程序名 %(funcName)s:打印日誌的當前函數 %(lineno)d:打印日誌的當前行號 %(asctime)s:打印日誌的時間 %(thread)d:打印線程ID %(threadName)s:打印線程名稱 %(process)d:打印進程ID %(message)s:打印日誌信息 datefmt:指定時間格式,同time.strftime(); level:設置日誌級別,默認爲logging.WARNNING; stream:指定將日誌的輸出流,能夠指定輸出到sys.stderr,sys.stdout或者文件,默認輸出到sys.stderr,當stream和filename同時指定時,stream被忽略 """ # 建立一個日誌打印器 logger = logging.getLogger(name="satori") # 若是name不指定,那麼默認爲"root" # 下面就能夠打印了 logger.debug("i am a debug") logger.info("i am a info") logger.warning("i am a warning") logger.error("i am a error") logger.critical("i am a critical") logger.fatal("i am a fatal") """ 2019-06-27 17:08:55,206 - satori - INFO - i am a info 2019-06-27 17:08:55,206 - satori - WARNING - i am a warning 2019-06-27 17:08:55,206 - satori - ERROR - i am a error 2019-06-27 17:08:55,206 - satori - CRITICAL - i am a critical 2019-06-27 17:08:55,206 - satori - CRITICAL - i am a fatal """ # 可是咱們發現debug貌似沒有打印,這是由於咱們將日誌等級設置成了INFO # 那麼等級比它弱的將不會輸出,若是咱們將日誌等級設置爲ERROR,那麼同理debug、info、warning將不會起做用
import logging # 咱們設置日誌等級和輸出格式其實有兩種,剛纔的是一種,下面介紹第二種。 logger = logging.getLogger("satori") # 能夠經過logger設置日誌等級 logger.setLevel(level=logging.ERROR) # 建立FileHandler,相似於open file_handler = logging.FileHandler("1.txt", mode="a", encoding="utf-8") # 建立輸出的格式 format = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") # 將格式設置到handler裏面去 file_handler.setFormatter(format) # 再將handler添加到logger裏面去,那麼此時logger在輸出的時候即可以輸出到文件裏面去 logger.addHandler(file_handler) logger.warning("i am a warning") logger.fatal("yabai,fatal occurred")
此時1.txt文件內容以下python
2019-06-27 17:19:46,525 - satori - CRITICAL - yabai,fatal occurred
並且此時並無輸出到控制檯,但若是我同時也想輸出到控制檯呢?而且我想爲輸出到文件和輸出到控制檯設置不一樣的等級,文件我想記錄的簡單一點,可是控制檯我想看的詳細一點,怎麼辦呢?算法
import logging logger = logging.getLogger("satori") # 這裏就不要再使用logger設置日誌等級了 # logger.setLevel(level=logging.ERROR) # 建立FileHandler實例,相似於open file_handler = logging.FileHandler("2.txt", mode="a", encoding="utf-8") # 使用FileHandler設置日誌等級 file_handler.setLevel(level=logging.ERROR) # 建立輸出的格式 file_format = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") # 將格式設置到handler裏面去 file_handler.setFormatter(file_format) # 既然文件有一個FileHandler,那麼控制檯也有一個StreamHandler # 既然是輸出到控制檯,那麼就不須要參數了 console_handler = logging.StreamHandler() # 設置日誌等級,控制檯我想看的詳細一點,因此設置爲INFO console_handler.setLevel(level=logging.INFO) # 一樣要設置日誌格式 console_format = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") console_handler.setFormatter(console_format) # 再將handler添加到logger裏面去 logger.addHandler(file_handler) logger.addHandler(console_handler) logger.info("i am a info") logger.warning("i am a warning") logger.error("i am a error")
在控制檯和文件中分別輸出以下函數
控制檯 2019-06-27 17:32:46,031 - satori - WARNING - i am a warning 2019-06-27 17:32:46,032 - satori - ERROR - i am a error 文件 2019-06-27 17:32:46,032 - satori - ERROR - i am a error