zoukankan      html  css  js  c++  java
  • 日志处理

    首先, 你要知道在编写任何一款软件的时候, 都会出现各种各样的问题或者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
  • 相关阅读:
    arcgis api 3.x for js 入门开发系列八聚合效果(附源码下载)
    arcgis api 3.x for js 入门开发系列七图层控制(附源码下载)
    arcgis api 3.x for js 入门开发系列六地图分屏对比(附源码下载)
    arcgis api 3.x for js 入门开发系列五地图态势标绘(附源码下载)
    arcgis api 3.x for js 入门开发系列四地图查询(附源码下载)
    Java里面获取当前服务器的IP地址
    Flutter at Google I/O 2018
    Modbus RTU 协议使用汇总
    plsql 创建表空间、用户、赋予权限
    Oracle:ODP.NET Managed 小试牛刀
  • 原文地址:https://www.cnblogs.com/Majintao/p/9754860.html
Copyright © 2011-2022 走看看