Python 日誌列印模組

來源:互聯網
上載者:User

標籤:color   art   method   簡介   strftime   標準輸出   查看   basic   函數   

1 logging模組簡介

logging模組是Python內建的標準模組,主要用於輸出作業記錄,可以設定輸出日誌的等級、日誌儲存路徑、記錄檔復原等;相比print,具備如下優點:

  1. 可以通過設定不同的日誌等級,在release版本中只輸出重要訊息,而不必顯示大量的調試資訊;
  2. print將所有資訊都輸出到標準輸出中,嚴重影響開發人員從標準輸出中查看其它資料;logging則可以由開發人員決定將資訊輸出到什麼地方,以及怎麼輸出;

 

2 logging模組使用2.1 基本使用

配置logging基本的設定,然後在控制台輸出日誌,

 

1 import logging2 logging.basicConfig(level = logging.INFO,format = ‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)3 logger = logging.getLogger(__name__)4 5 logger.info("Start print log")6 logger.debug("Do something")7 logger.warning("Something maybe fail.")8 logger.info("Finish")

 

logging中可以選擇很多訊息層級,如debug、info、warning、error以及critical。通過賦予logger或者handler不同的層級,開發人員就可以只輸出錯誤資訊到特定的記錄檔案,或者在調試時只記錄調試資訊。

 

logging.basicConfig函數各參數:
filename:指定記錄檔名;
filemode:和file函數意義相同,指定記錄檔的開啟模式,‘w‘或者‘a‘;
format:指定輸出的格式和內容,format可以輸出很多有用的資訊,
參數:作用

%(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被忽略;

 

2.2 將日誌寫入到檔案

2.2.1 將日誌寫入到檔案

設定logging,建立一個FileHandler,並對輸出訊息的格式進行設定,將其添加到logger,然後將日誌寫入到指定的檔案中

 

 1 import logging 2 logger = logging.getLogger(__name__) 3 logger.setLevel(level = logging.INFO) 4 handler = logging.FileHandler("log.txt") 5 handler.setLevel(logging.INFO) 6 formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘) 7 handler.setFormatter(formatter) 8 logger.addHandler(handler) 9 10 logger.info("Start print log")11 logger.debug("Do something")12 logger.warning("Something maybe fail.")13 logger.info("Finish")

 

下面是封裝的一個 日誌列印助手:

 1 import logging.handlers 2  3 """ 4  %(levelno)s: 列印記錄層級的數值 5  %(levelname)s: 列印記錄層級名稱 6  %(pathname)s: 列印當前執行程式的路徑,其實就是sys.argv[0] 7  %(filename)s: 列印當前執行程式名 8  %(funcName)s: 列印日誌的當前函數 9  %(lineno)d: 列印日誌的當前行號10  %(asctime)s: 列印日誌的時間11  %(thread)d: 列印線程ID12  %(threadName)s: 列印線程名稱13  %(process)d: 列印進程ID14  %(message)s: 列印日誌資訊15 """16 17 class LogAssistant:18     logger = None19     # 日誌一共分成5個等級,從低到高分別是:DEBUG INFO WARNING ERROR CRITICAL。這5個等級,也分別對應5種打日誌的方法: debug 、info 、warning 、error 、critical。預設的是WARNING,20 21     levels = {"d": logging.DEBUG,22               "i": logging.INFO,23               "w": logging.WARNING,24               "e": logging.ERROR,25               "c": logging.CRITICAL}26 27     log_level = "d"28     log_file = "log.txt"29     log_max_byte = 10 * 1024 * 1024;30     log_backup_count = 531 32     @staticmethod33     def getLogger():34         if LogAssistant.logger is not None:35             return LogAssistant.logger36 37         LogAssistant.logger = logging.Logger("LogAssistant")38         log_handler = logging.handlers.RotatingFileHandler(filename=LogAssistant.log_file, 39                                                            maxBytes=LogAssistant.log_max_byte, 40                                                            backupCount=LogAssistant.log_backup_count)41         log_fmt = logging.Formatter("[%(asctime)s][%(levelname)s][func:%(funcName)s][thread:%(thread)d]: %(message)s")42         log_handler.setFormatter(log_fmt)43         LogAssistant.logger.addHandler(log_handler)44         LogAssistant.logger.setLevel(LogAssistant.levels.get(LogAssistant.log_level))45         return LogAssistant.logger46 47 def output_test():48     logger = LogAssistant.getLogger()49     logger.debug("this is a debug msg!")50 51 if __name__ == "__main__":52     output_test()

 

Python 日誌列印模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.