Python logging模块的使用
1. 使用了 logger 对象
2. 为logger添加handle, 设置了handle的level和格式化输出, 判断是否传入log_file, 是否将log写入文件, 没有传入就打印到终端
import logging class Log: ''' 模块化使用 : 创建一个logger对象, 并且进行初始化设置 : 将logger对象进行返回, 方便使用 : NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL : 注意这里有个大坑, NOTSET不是显示所有消息, 而是默认的 WARNING 等级 : 想要显示所有的消息, 把等级设置为 logging.DEBUG 或者 10 : logger 和 handle的等级是谁高用谁, 比如 DEBUG和WARNING 不管谁先设置, 都是用 WARNING 等级 ''' def __init__(self, logger_name="logger"): self.logger = logging.getLogger(logger_name) # 创建一个logger对象 self.logger.setLevel(logging.DEBUG) # NOTSET 默认是WARING def create_handle(self, log_level=logging.DEBUG, log_file=None): ''' : log_level 等级 : NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL : 0 < 10 < 20 < 30 < 40 < 50 ''' # 判断是终端输出还是文件输出 if log_file == None: handle = logging.StreamHandler() # terminal print else: handle = logging.FileHandler(log_file, encoding="utf-8") # write to file handle.setLevel(log_level) # 设置handle的等级 # 设置log输出格式 formatter = logging.Formatter("%(levelname)s - %(asctime)s - %(filename)s[line:%(lineno)d] - %(message)s",datefmt='%Y-%m-%d %a %H:%M:%S') handle.setFormatter(formatter) # 添加handle到logger self.logger.addHandler(handle) def return_logger(self): ''' :return: 返回logger以便使用 ''' return self.logger if __name__ == "__main__": # 测试 log_obj = Log(logger_name="test_log") log_obj.create_handle() logger = log_obj.return_logger() logger.info('test_log') logger.warning("warning")