公司动态
logging库——python版的glog日志
logging库——python版的glog日志1. 安装2. 日志等级3. 快速使用4. 同时输出到日志文件和终端使用过c版本的glog日志记录后发现日志分级和随时可以切换输出到log文件与终端的功能非常方便就想着python是否也有类似的功能呢搜索之后发现的确有这样的一个库那就是python的logging库。1. 安装朴实无华的安装pipinstalllogging2. 日志等级logging分为六种日志级别设置显示等级时会包括所有大于等级设置等级的信息NOTSET(0)全部日志DEBUG(10)用于调试信息INFO(20)用于通知信息WARNING(30)用于警告信息ERROR(40)用于错误信息CRITICAL(50)严重错误程序无法继续运行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)# 创建输出文件夹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避免第三方库调用basicConfig后输出重复日志logger.propagateFalse# 创建一个handler用于写入日志文件file_handlerlogging.FileHandler(log_path,encodingutf-8)file_handler.setLevel(logging.INFO)# 再创建一个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)# 设置为北京时区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