一、logging模块简介
logging模块是Python内置的标准模块,主要用于输出运行日志
二、logging模块使用
1、输出日志信息参数:
%(levelno)s:打印日志级别的数值
%(levelname)s:打印日志级别的名称
%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s:打印当前执行程序名
%(funcName)s:打印日志的当前函数
%(lineno)d:打印日志的当前行号
%(asctime)s:打印日志的时间
%(thread)d:打印线程ID
%(threadName)s:打印线程名称
%(process)d:打印进程ID
2、基础代码
# 实例化日志模块 logger = logging.getLogger() # 定义日志级别,默认是logging.WARNNING logger.setLevel(logging.INFO) # 定义处理程序,logPath日志路径,"output.log"日志文件名 handler = logging.FileHandler(os.path.join(logPath, "output.log")) # 定义处理程序级别 handler.setLevel(logging.INFO) # 定义的格式化程序 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # 添加处理程序 logger.addHandler(handler) # 打印信息 logger.info("Start Print log") logger.debug("Start Print log") logger.warning("Start Print log") logger.info("Start Print log")
3、把Log的基础设置封装成一个Log类
import logging from datetime import datetime import os class Log: def __init__(self): # global 定义全局变量 global logPath, resultPath, proDir proDir = os.path.split(os.path.realpath(__file__))[0] # 获得当前路径 # 拼接result路径 resultPath = os.path.join(proDir, "result") # result文件是否存在 if not os.path.exists(resultPath): os.mkdir(resultPath) # 不存在,创建result文件 # 拼接log文件路径,并定义文件名格式 logPath = os.path.join(resultPath, str(datetime.now().strftime("%Y%m%d%H%M%S"))) # log文件是否存在 if not os.path.exists(logPath): os.mkdir(logPath) # 不存在,创建log文件 # 实例化日志模块 self.logger = logging.getLogger() # 定义日志级别 self.logger.setLevel(logging.INFO) # 定义处理程序 handler = logging.FileHandler(os.path.join(logPath, "output.log")) # 定义处理程序级别 handler.setLevel(logging.INFO) # 定义的格式化程序 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 把定义的格式放入日志处理程序里 handler.setFormatter(formatter) # 添加处理程序 self.logger.addHandler(handler)
在其他类调用
from common.Log import Log import logging class Test: def __init__(self): self.log = Log() # 实例化Log,执行Log构造函数的配置 self.logger = logging.getLogger() # 实例化logger def get_attr(self): # 直接调用 self.logger.info("这是 info ----") self.logger.debug("Start Print log") self.logger.warning("Start Print log") t = Test() t.get_attr()