——python版的glog日志)
logging庫(kù)——python版的glog日志1. 安裝2. 日志等級(jí)3. 快速使用4. 同時(shí)輸出到日志文件和終端使用過(guò)c版本的glog日志記錄后發(fā)現(xiàn)日志分級(jí)和隨時(shí)可以切換輸出到log文件與終端的功能非常方便就想著python是否也有類似的功能呢搜索之后發(fā)現(xiàn)的確有這樣的一個(gè)庫(kù)那就是python的logging庫(kù)。1. 安裝樸實(shí)無(wú)華的安裝pipinstalllogging2. 日志等級(jí)logging分為六種日志級(jí)別設(shè)置顯示等級(jí)時(shí)會(huì)包括所有大于等級(jí)設(shè)置等級(jí)的信息NOTSET(0)全部日志DEBUG(10)用于調(diào)試信息INFO(20)用于通知信息WARNING(30)用于警告信息ERROR(40)用于錯(cuò)誤信息CRITICAL(50)嚴(yán)重錯(cuò)誤程序無(wú)法繼續(xù)運(yùn)行3. 快速使用一種簡(jiǎn)單快速使用日志功能的方法能夠自定義日志輸出格式和時(shí)間戳顯示格式自定義日志的等級(jí)。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. 同時(shí)輸出到日志文件和終端注該方法不要與上一個(gè)快速使用方法同時(shí)使用否則會(huì)造成重復(fù)的log信息在終端上打印兩遍importtimeimportshutilimportloggingimportos# 初始化logging模塊設(shè)定# 輸入log存儲(chǔ)路徑是否先清空該路徑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# 輸出的日志文件用時(shí)間命名log_pathos.path.join(log_dir,log_name) logger的level決定了你可以處理的最低級(jí)別的日志。 如果一個(gè)logger的level被設(shè)置為INFO那么所有DEBUG級(jí)別的日志消息都會(huì)被logger忽略不會(huì)傳遞給它的handler。 handler的level則是在logger級(jí)別的基礎(chǔ)上進(jìn)一步過(guò)濾日志。 比如即使logger的level被設(shè)置為DEBUG但是如果一個(gè)handler的level被設(shè)置為WARNING那么這個(gè)handler就只會(huì)處理WARNING、ERROR和CRITICAL級(jí)別的日志。 如果需求比較簡(jiǎn)單比如所有級(jí)別的日志都輸出到同一個(gè)地方那么可以只設(shè)置logger的level并使用默認(rèn)的handler默認(rèn)的level是NOTSET即接收所有日志 # 對(duì)全局的logging修改配置# logger logging.getLogger()# 使用新建的獨(dú)立loggerloggerlogging.getLogger(starvapour)# logger.setLevel(logging.DEBUG) # 設(shè)置日志級(jí)別# 阻止日志向上傳播到root logger避免第三方庫(kù)調(diào)用basicConfig后輸出重復(fù)日志logger.propagateFalse# 創(chuàng)建一個(gè)handler用于寫入日志文件file_handlerlogging.FileHandler(log_path,encodingutf-8)file_handler.setLevel(logging.INFO)# 再創(chuàng)建一個(gè)handler用于輸出到控制臺(tái)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)# 設(shè)置為北京時(shí)區(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