
logging庫——python版的glog日志1. 安裝2. 日志等級3. 快速使用4. 同時輸出到日志文件和終端使用過c版本的glog日志記錄后發(fā)現(xiàn)日志分級和隨時可以切換輸出到log文件與終端的功能非常方便就想著python是否也有類似的功能呢搜索之后發(fā)現(xiàn)的確有這樣的一個庫那就是python的logging庫。1. 安裝樸實無華的安裝pipinstalllogging2. 日志等級logging分為六種日志級別設置顯示等級時會包括所有大于等級設置等級的信息NOTSET(0)全部日志DEBUG(10)用于調(diào)試信息INFO(20)用于通知信息WARNING(30)用于警告信息ERROR(40)用于錯誤信息CRITICAL(50)嚴重錯誤程序無法繼續(xù)運行3. 快速使用一種簡單快速使用日志功能的方法能夠自定義日志輸出格式和時間戳顯示格式自定義日志的等級。importlogging# 配置日志輸出模式logging.basicConfig(format%(asctime)s.%(msecs)03d|%(name)s|%(levelname)s|%(message)s,datefmt%Y/%m/%d %H:%M:%S,levellogging.INFO)logging.info(hi)4. 同時輸出到日志文件和終端注該方法不要與上一個快速使用方法同時使用否則會造成重復的log信息在終端上打印兩遍importtimeimportshutilimportloggingimportos# 初始化logging模塊設定# 輸入log存儲路徑是否先清空該路徑definit_logging(log_dir,remove_old_logFalse):# 是否清空舊日志ifos.path.exists(log_dir)andremove_old_log:shutil.rmtree(log_dir)# 創(chuàng)建輸出文件夾os.makedirs(log_dir,exist_okTrue)local_timetime.localtime()log_namef{local_time[0]:04d}-{local_time[1]:02d}-{local_time[2]:02d}-{local_time[3]:02d}-\f{local_time[4]:02d}-{local_time[5]:02d}.log# 輸出的日志文件用時間命名log_pathos.path.join(log_dir,log_name) logger的level決定了你可以處理的最低級別的日志。 如果一個logger的level被設置為INFO那么所有DEBUG級別的日志消息都會被logger忽略不會傳遞給它的handler。 handler的level則是在logger級別的基礎上進一步過濾日志。 比如即使logger的level被設置為DEBUG但是如果一個handler的level被設置為WARNING那么這個handler就只會處理WARNING、ERROR和CRITICAL級別的日志。 如果需求比較簡單比如所有級別的日志都輸出到同一個地方那么可以只設置logger的level并使用默認的handler默認的level是NOTSET即接收所有日志 # 對全局的logging修改配置# logger logging.getLogger()# 使用新建的獨立loggerloggerlogging.getLogger(starvapour)# logger.setLevel(logging.DEBUG) # 設置日志級別# 阻止日志向上傳播到root logger避免第三方庫調(diào)用basicConfig后輸出重復日志logger.propagateFalse# 創(chuàng)建一個handler用于寫入日志文件file_handlerlogging.FileHandler(log_path,encodingutf-8)file_handler.setLevel(logging.INFO)# 再創(chuàng)建一個handler用于輸出到控制臺console_handlerlogging.StreamHandler()console_handler.setLevel(logging.INFO)# 定義handler的輸出格式formatterlogging.Formatter(%(asctime)s.%(msecs)03d|%(name)s|%(levelname)s|%(message)s,datefmt%Y/%m/%d %H:%M:%S)# 設置為北京時區(qū)defbeijing(sec):iftime.strftime(%z)0800:returndatetime.datetime.now().timetuple()return(datetime.datetime.now()datetime.timedelta(hours8)).timetuple()formatter.converterbeijing file_handler.setFormatter(formatter)console_handler.setFormatter(formatter)# 給logger添加handlerlogger.addHandler(file_handler)logger.addHandler(console_handler)returnlogger