首先, 你要知道在编写任何一款软件的时候, 都会出现各种各样的问题或者bug.这些问题或者bug一般都会在测试的时候给处理掉.但是多多少少的都会出现一些意想不到的异常或者错误.那这个时候, 我们是不知道哪里出了问题的.因为很多BUG都不是必现的bug.如果是必现的.测试的时候肯定能测出来.最头疼的就是这种不必现的bug.我这跑没问题.客户那一用就出问题就出问题.那怎么办呢?我们需要给软件准备一日志系统.当出现任何错误的时候.我们都可以去日志系统里去查.看哪里出了问题.这样在解决问题和bug的时候就多了一个帮手.那如何在python中创建这个日志系统呢? 很简单.
1.导入logging模块.
2.简单配置一下logging
3.出现异常的时候(except).向日志里写错误信息
1 # filename: 文件名 2 # format: 数据的格式化输出. 最终在日志文件中的样子 3 # 时间-名称-级别-模块: 错误信息 4 # datefmt: 时间的格式 5 # level: 错误的级别权重, 当错误的级别权重大于等于leval的时候才会写入文件 6 logging.basicConfig(filename='x1.txt', 7 format='%(asctime)s - %(name)s - %(levelname)s -% 8 (module)s: %(message)s', 9 datefmt='%Y-%m-%d %H:%M:%S', 10 level=0) # 当前配置表示 10以上的分数会被写入文件 11 # CRITICAL = 50 12 # FATAL = CRITICAL 13 # ERROR = 40 14 # WARNING = 30 15 # WARN = WARNING 16 # INFO = 20 17 # DEBUG = 10 18 # NOTSET = 0 19 logging.critical("我是critical") # 50分. 最贵的 20 logging.error("我是error") # 40分 21 logging.warning("我是警告") # 警告 30 22 logging.info("我是基本信息") # 20 23 logging.debug("我是调试") # 10 24 logging.log(2, "我是自定义") # 自定义. 看着给分
简单做个测试,应用一下
1 class JackError(Exception): 2 pass 3 for i in range(10): 4 try: 5 if i % 3 == 0: 6 raise FileNotFoundError("文件不在啊") 7 elif i % 3 == 1: 8 raise KeyError("键错了") 9 elif i % 3 == 2: 10 raise JackError("杰克Exception") 11 except FileNotFoundError: 12 val = traceback.format_exc() 13 logging.error(val) 14 except KeyError: 15 val = traceback.format_exc() 16 logging.error(val) 17 except JackError: 18 val = traceback.format_exc() 19 logging.error(val) 20 except Exception: 21 val = traceback.format_exc() 22 logging.error(val)
最后, 如果你系统中想要把日志文件分开. 比如. 一个大项目, 有两个子系统, 那两个子系统要分开记录日志. 方便调试. 那怎么办呢? 注意. 用上面的basicConfig是搞不定的. 我们要借助文件助手(FileHandler), 来帮我们完成日志的分开记录
1 import logging 2 # 创建一个操作日志的对象logger(依赖FileHandler) 3 file_handler = logging.FileHandler('l1.log', 'a', encoding='utf-8') 4 file_handler.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - % 5 (levelname)s -%(module)s: %(message)s")) 6 7 logger1 = logging.Logger('s1', level=logging.ERROR) 8 logger1.addHandler(file_handler) 9 10 logger1.error('我是A系统') 11 # 再创建一个操作日志的对象logger(依赖FileHandler) 12 file_handler2 = logging.FileHandler('l2.log', 'a', encoding='utf-8') 13 file_handler2.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - 14 %(levelname)s -%(module)s: %(message)s")) 15 16 logger2 = logging.Logger('s2', level=logging.ERROR) 17 logger2.addHandler(file_handler2) 18 19 logger2.error('我是B系统')