zoukankan      html  css  js  c++  java
  • Python之自定义封装一个简单的Log类

    参考:http://www.jb51.net/article/42626.htm

    参考:http://blog.csdn.net/u011541946/article/details/70198676

    介绍如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里。我们需要记录我们测试脚本到底做了什么事情,最好的办法是写事件监听。这个事件监听,对我们现在来说,还是有点复杂去理解,所以我这里,选择封装一个简单的日志类,同样达到这个效果。
    我们大概需要如下日志输出效果:

    问题分析:
    我们需要封装一个简单的日志类,主要有以下内容:
    1. 生成的日志文件格式是 年月日时分秒.log
    2. 生成的xxx.log文件存储在项目根目录下Logs文件夹下
    3. 这个日志类,支持INFO,ERROR两种日志级别
    4. 日志里,每行日志输出,如上图,时间日期+执行类名称+日志级别+日志描述

    解决问题思路:
    1. 在根目录下新建一个Logs的文件夹,如何获取这个Log的相对路径,前面介绍过。
    2. 日志的保存命名,需要系统时间,前面也介绍过时间格式化输出
    3. Python中有一个logging模块来支持我们自定义封装一个新日志类。
    4. 在脚本里,初始化一个日志类的实例对象,然后去控制输出INFO还是ERROR日志信息。

    如果你想开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件,只要这样使用:

     1 # _*_ coding: utf-8 _*_
     2 import logging
     3 import os.path
     4 import time
     5 
     6 
     7 class Logger(object):
     8     def __init__(self, logger):
     9         """
    10         指定保存日志的文件路径,日志级别,以及调用文件
    11             将日志存入到指定的文件中
    12         :param logger:
    13         """
    14         # 创建一个logger
    15         self.logger = logging.getLogger(logger)
    16         self.logger.setLevel(logging.DEBUG)
    17 
    18         # 创建日志名称。
    19         rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
    20         # os.getcwd()获取当前文件的路径,os.path.dirname()获取指定文件路径的上级路径
    21         log_path = os.path.dirname(os.getcwd()) + '/Logs/'
    22         log_name = log_path + rq + '.log'
    23         # 创建一个handler,用于写入日志文件
    24         fh = logging.FileHandler(log_name)
    25         fh.setLevel(logging.INFO)
    26 
    27         # 再创建一个handler,用于输出到控制台
    28         ch = logging.StreamHandler()
    29         ch.setLevel(logging.INFO)
    30 
    31         # 定义handler的输出格式
    32         formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    33         fh.setFormatter(formatter)
    34         ch.setFormatter(formatter)
    35 
    36         # 给logger添加handler
    37         self.logger.addHandler(fh)
    38         self.logger.addHandler(ch)
    39 
    40     def getlog(self):
    41         return self.logger
  • 相关阅读:
    Leetcode100.相同的树
    Leetcode53. 最大子序列和
    Leetcode35. 搜索插入位置
    Leetcode27.移除元素
    Leetcode 26. 删除排序数组中的重复项
    Leetcode. 1290 二进制链表转整数
    Leetcode.234 回文链表
    Leetcode206.反转链表
    课本 求素数
    循环法求素数 1306 循环求素数10.1.5.253 ====== 1313 筛选法求素数10.1.5.253
  • 原文地址:https://www.cnblogs.com/fengyiru6369/p/8052953.html
Copyright © 2011-2022 走看看