• python:利用logbook模块管理日志


     

    日志管理作为软件项目的通用部分,无论是开发还是自动化测试过程中,都显得尤为重要。

    最初是打算利用python的logging模块来管理日志的,后来看了些github及其他人的自动化框架设计,做了个比对后,还是决定使用logbook。

    这篇博客,介绍下python中的logbook模块的使用方法,仅供参考。。。

    一、下载安装

    1、文件安装

    从官网下载logbook安装文件,然后安装即可。

    官网链接:https://pypi.org/project/Logbook/

    2、pip命令安装

    进入CMD命令行,输入 pip install logbook 命令进行安装,安装成功后,输入 pip show logbook 命令,查看相关信息。

    二、logbook简介

    logbook的设计初衷,就是用来取代python的标准库日志模块:logging。具体内容可通过下方的链接查看官方文档说明:

    官方文档:http://logbook.readthedocs.io/en/stable/index.html

    三、用法说明

    示例代码如下:log.py

    复制代码
    # coding=utf-8
    import os
    import sys
    import logbook
    from logbook import Logger,StreamHandler,FileHandler,TimedRotatingFileHandler
    from logbook.more import ColorizedStderrHandler
    
    def log_type(record,handler):
        log = "[{date}] [{level}] [{filename}] [{func_name}] [{lineno}] {msg}".format(
            date = record.time,                              # 日志时间
            level = record.level_name,                       # 日志等级
            filename = os.path.split(record.filename)[-1],   # 文件名
            func_name = record.func_name,                    # 函数名
            lineno = record.lineno,                          # 行号
            msg = record.message                             # 日志内容
        )
        return log
    
    # 日志存放路径
    LOG_DIR = os.path.join("Log")
    if not os.path.exists(LOG_DIR):
        os.makedirs(LOG_DIR)
    # 日志打印到屏幕
    log_std = ColorizedStderrHandler(bubble=True)
    log_std.formatter = log_type
    # 日志打印到文件
    log_file = TimedRotatingFileHandler(
        os.path.join(LOG_DIR, '%s.log' % 'log'),date_format='%Y-%m-%d', bubble=True, encoding='utf-8')
    log_file.formatter = log_type
    
    # 脚本日志
    run_log = Logger("script_log")
    def init_logger():
        logbook.set_datetime_format("local")
        run_log.handlers = []
        run_log.handlers.append(log_file)
        run_log.handlers.append(log_std)
    
    # 实例化,默认调用
    logger = init_logger()
    复制代码

    代码解析:

    1、定义日志文件类型,依次按照时间、日志等级、测试文件名、函数方法名、行数、具体的信息来展示;

       日志等级:

    level describe
    critical 严重错误,会导致程序退出
    error 可控范围内的错误
    warning 警告信息
    notice 大多情况下希望看到的记录
    info 大多情况不希望看到的记录
    debug 调试程序时详细输出的记录

    2、定义日志存放路径为Log文件夹;

    3、logbook的日志输出方式有2种:打印到屏幕(比较适合调试时候,正式使用时可以将其注释掉)和打印输出到日志文件;

    4、定义日志输出;

    5、实例化,方便其他模块调用;

    可以通过测试代码来测试日志是否打印到了对应的路径,测试代码如下:test_log.py

    复制代码
    # coding=utf-8
    import os
    from log import run_log as logger
    
    if __name__ == '__main__':
        logger.info("测试log模块,暂时就优化到这一步,后续再改进")
    复制代码

    测试结果:

    ####


    python:利用logbook模块管理日志

    1. 模块安装(采用pip命令安装)
        进入cmd命令,输入pip install logbook安装, 安装成功之后采用pip show logbook查看相关信息
    2. logbook简介
        http://logbook.readthedocs.io/en/stable/index.html
    3. 用法说明
    import os
    import logbook
    from logbook import Logger, TimedRotatingFileHandler
    from logbook.more import ColorizedStderrHandler
     
     
    # 设置日志格式
    def log_type(record, handler):
        log = "[{date}] [{level}] [{filename}] [{func_name}] [{lineno}] {msg}".format(
            date=record.time,  # 日志时间
            level=record.level_name,  # 日志等级
            filename=os.path.split(record.filename)[-1],  # 文件名
            func_name=record.func_name,  # 函数名
            lineno=record.lineno,  # 行号
            msg=record.message  # 日志内容
        )
        return log
     
     
    # 日志存放路径
    LOG_DIR = os.path.join("Log")
    if not os.path.exists(LOG_DIR):
        os.makedirs(LOG_DIR)
    # 日志打印到屏幕
    log_std = ColorizedStderrHandler(bubble=True)
    # 生成日志格式
    log_std.formatter = log_type
    # 日志打印到文件
    log_file = TimedRotatingFileHandler(
        os.path.join(LOG_DIR, '%s.log' % 'log'), date_format='%Y-%m-%d', bubble=True, encoding='utf-8')
    # 日志生成格式
    log_file.formatter = log_type
     
    # 脚本日志
    run_log = Logger("global_log")
     
     
    def init_logger():
        logbook.set_datetime_format("local")
        # 生效配置
        run_log.handlers = []
        run_log.handlers.append(log_file)
        run_log.handlers.append(log_std)
     
    # 实例化,默认调用
    logger = init_logger()
     
     
    if __name__ == '__main__':
        run_log.info("测试Log模块")

    #####

    #####

  • 相关阅读:
    Unity 游戏框架搭建 2019 (二十九) 方法所在类命名问题诞生的原因
    Unity 游戏框架搭建 2019 (二十七、二十八)弃用的代码警告解决&弃用的代码删除
    Unity 游戏框架搭建 2019 (二十六) 第一轮整理完结
    Unity 游戏框架搭建 2019 (二十五) 类的第一个作用 与 Obselete 属性
    排序算法之冒泡排序
    java中List Array相互转换
    java迭代器浅析
    谈谈java中遍历Map的几种方法
    浅谈java反射机制
    springMvc注解之@ResponseBody和@RequestBody
  • 原文地址:https://www.cnblogs.com/andy0816/p/15614238.html
Copyright © 2020-2023  润新知