【Python】寫日誌

  1. Log Level
    logging模塊提供5個級別的日誌管理,
    loglevel
    日誌等級由下至上逐漸提升,設置日誌等級後,只有等級大於等於設定級別的日誌寫入操作纔會執行寫入,如果將log的level設置爲INFO,那麼除了DEBUG級別的打印/寫文件之外,其他級別的都會打印/寫入
  2. 控制檯打印日誌
    方式一:獲取log的root對象,設置level後直接打印
    import logging
    
    #獲取logger root對象
    logger = logging.getLogger()
    #設置root對象的日誌等級爲debug
    level = logging.DEBUG
    logger.setLevel(level)
    #打印日誌
    logging.debug("DEBUG")
    logging.info("INFO")
    logging.error("ERROR")
    
    運行結果:
    日誌打印結果
    方式二:使用basicConfig
    basicConfig通過對logger root對象添加一個帶有指定formatter的StreamHandller來完成對日誌系統的初始配置
    參數列表
    BasicConfig參數列表
    直接打印日誌到控制檯的話,只需要設置一下日誌等級即可
    import logging
    
    logging.basicConfig(level=logging.DEBUG)
    level = logging.INFO
    
    #打印日誌
    logging.debug("DEBUG")
    logging.log(level, "INFO BY Function Log")
    logging.info("INFO")
    logging.error("ERROR")
    
    運行結果
    運行結果截圖
    方式三:使用StreamHandler
    import logging
    import logging.handlers
    
    logger = logging.getLogger()
    level = logging.DEBUG
    logger.setLevel(level)
    
    hdlr = logging.StreamHandler()
    hdlr.setLevel(level)
    logger.addHandler(hdlr)
    
    #打印日誌
    logger.debug("DEBUG: Modify Logger")
    logger.info("INFO")
    logger.error("ERROR")
    
    運行結果:
    Streamhandller運行結果
  3. 寫日誌文件
    方式一:使用BasicConfig
    在BasicConfig中添加日誌文件路徑參數
    import logging
    
    logging.basicConfig(filename='./run.log', level=logging.DEBUG)
    level = logging.INFO
    
    #打印日誌
    logging.debug("DEBUG")
    logging.log(level, "INFO BY Function Log")
    logging.info("INFO")
    logging.error("ERROR")
    
    運行結果截圖
    方式二:綁定handller
    TimedRotatingFileHandler
    打開指定文件作爲日誌流對象返回,支持按一定的時間間隔輪詢日誌,即支持按照一定的時間間隔重新創建新的日誌文件,並對原有的日誌文件重命名。
    函數參數:
    filename:日誌文件文件名
    when:指定什麼時間點對原有文件重命名,有效參數如下:
    when的有效參數
    interval:時間間隔,單位與when對應
    backupCount:最大保留日誌文件的個數
    需要指定日誌文件重命名格式,設置返回值的suffix屬性。
    import logging
    import logging.handlers
    
    logger = logging.getLogger()
    level = logging.DEBUG
    logger.setLevel(level)
    
    hdlr = logging.handlers.TimedRotatingFileHandler("./run.log", when='midnight', interval=1, backupCount=5)
    hdlr.suffix = "%Y%m%d"
    logger.propagate = False
    logger.addHandler(hdlr)
    
    #打印日誌
    logger.debug("DEBUG: Modify Logger")
    logger.info("INFO")
    logger.error("ERROR")
    
    需要注意一下propagate參數,表示是否傳遞父對象參數,而父對象是會王console窗口打印輸出的,所以,如果只寫文件的話,需要將該參數設置爲False
    運行結果:
    在這裏插入圖片描述
    RotatingFileHandler
    按照指定的mode修改指定的文件並作爲日誌流對象返回,參數如下:
    filename:日誌文件名
    mode:文件修改方式
    maxBytes:文件最大大小,默認0,不限制
    backupCount:保留日誌的最大個數
    import logging
    import logging.handlers
    
    logger = logging.getLogger()
    level = logging.DEBUG
    logger.setLevel(level)
    
    hdlr = logging.handlers.RotatingFileHandler("./run.log", mode = 'a', backupCount = 2)
    hdlr.setLevel(level)
    logger.addHandler(hdlr)
    
    #打印日誌
    logger.debug("~~~~~~~~~~~~RotatingFileHandler append~~~~~~~~~~~~~~~~~~~~~~~")
    logger.debug("DEBUG: Modify Logger")
    logger.info("INFO")
    logger.error("ERROR")
    
    代碼中設置mode爲‘a’,即在文件末尾追加日誌,當設置爲’w’後,創建handdler時會清空原文件。
    運行結果:
    在這裏插入圖片描述
    FileHanddler 與StreamHandller類似
    import logging
    import logging.handlers
    
    logger = logging.getLogger()
    level = logging.DEBUG
    logger.setLevel(level)
    
    hdlr = logging.FileHandler("./run.log")
    hdlr.setLevel(level)
    logger.addHandler(hdlr)
    
    #打印日誌
    logger.debug("DEBUG: Modify Logger")
    logger.info("INFO")
    logger.error("ERROR")
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章