logging模块是专门做日志系统的.分为函数版和自定义函数.
(一)logging模块初级版
缺点,不能指定字符集,不能把屏幕输出和文件日志同时记录。只能选择其一。
文件记录日志
import logging logging.basicConfig( level = 30, filename = "logger.log", filemode = "a", format = '%(asctime)s-%(name)s-%(lineno)d-%(message)s', ) logging.warning("这是一个警告") logging.error("这是一个错误") logging.critical("这是一个严重错误")
屏幕输出日志
import logging logging.basicConfig( level = 30, #filename = "logger.log", filemode = "a", format = '%(asctime)s-%(name)s-%(lineno)d-%(message)s', ) logging.warning("这是一个警告") logging.error("这是一个错误") logging.critical("这是一个严重错误")
(二)logging模块中自定义日志系统
import logging
logger = logging.getLogger() # 自定义一个模块系统 Formatter = logging.Formatter('%(asctime)s-%(name)s-%(lineno)d-%(message)s') # 定义日志输出格式 ft = logging.FileHandler("logger.log", "a", encoding="utf-8") # 定义文件流 st = logging.StreamHandler() # 定义屏幕流 ft.setFormatter(Formatter) # 将格式加载到文件流中 st.setFormatter(Formatter) # 将格式加载到屏幕流中 logger.addHandler(ft) # 将文件流加载到自定义的loger日志系统中 logger.addHandler(st) # 将屏幕流加载到自定义的loger日志系统中
logger.debug("这是一个debug") logger.info("这是一个info") logger.warning("这是一个warning") logger.error("这是一个error") logger.critical("这是一个critical") logger.removeHandler(ft) # 将Handler移除,避免下次调用,生成同样的Handler导致重复日志,Eg:第一次输出日志一行,第二次输出同样的两行日志(因为又生成了一个Handler) # 第三次输出同样的三行日志
常用方法:
import logging ft = logging.FileHandler("logger.log", "a", encoding="utf-8") # 定义文件流 Formatter = logging.Formatter('%(asctime)s Username:%(name)s message-%(message)s',datefmt='%Y:%m:%d') # 定义日志输出格式 ft.setFormatter(Formatter) # 将格式加载到文件流中 logger = logging.Logger(name='a',level=logging.DEBUG) # 自定义一个模块系统 logger.addHandler(ft) # 将文件流加载到自定义的loger日志系统中