日志处理

首先, 你要知道在编写任何一款软件的时候, 都会出现各种各样的问题或者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, "我是自定义") # 自定义. 看着给分
View Code

简单做个测试,应用一下

 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)
View Code

最后, 如果你系统中想要把日志文件分开. 比如. 一个大项目, 有两个子系统, 那两个子系统要分开记录日志. 方便调试. 那怎么办呢? 注意. 用上面的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系统')
View Code

 

posted on 2018-10-08 15:53  JintaoMA  阅读(321)  评论(0编辑  收藏  举报

导航