Python 通过生成器写一个日志调用方法, 支持以下功能

Python 通过生成器写一个日志调用方法, 支持以下功能

实例题目

通过生成器写一个日志调用方法, 支持以下功能
根据指令向屏幕输出日志
根据指令向文件输出日志
根据指令同时向文件&屏幕输出日志
以上日志格式如下
2017-10-19 22:07:38 [1] test log db backup 3
2017-10-19 22:07:40 [2] user alex login success
#注意:其中[1],[2]是指自日志方法第几次调用,每调用一次输出一条日志

代码结构如下:

def logger(filename,channel=file):
	日志方法
    :param filename: log filename
    :param channel: 输出的目的地,屏幕(terminal),文件(file),屏幕+文件(both)
    :return:

   your code
    #调用
    logobj = logger(filename=”web.log”,channel=’both’)
    log_obj.__next__()
    log_obj.send(‘user alex login success’)

代码答案

这个题目的要求,很明显是需要调用到Python 自带的日志模块 logging

  import logging      # 调用日志模块
    def logger(filename,channel="terminal"):
        """
        使用 logging 日志模块
        :param filename: 文件名
        :param channel: 输出目的地
        """
        logger = logging.getLogger("函数编程练习题Exe_13")
        logger.setLevel(level=logging.DEBUG)
        # 设置默认的日志等级
        formatter = logging.Formatter("%(levelname)s: %(name)s // %(asctime)s %(message)s")
        # 写定日志格式
        handler_stream = logging.StreamHandler()                                 #调用控制台输出
        handler_stream.setFormatter(formatter)
        handler_file = logging.FileHandler(filename,mode="w",encoding="utf-8")   #调用文件输出
        handler_file.setLevel(level=logging.DEBUG)
        handler_file.setFormatter(formatter)

        count = 1
        while True:
            msg = yield count
            count += 1
            if channel == "terminal":
                logger.addHandler(handler_stream)
                logger.info(f"[{count}] {msg}")
            elif channel == "file":
                logger.addHandler(handler_file)
                logger.info(f"[{count}] {msg}")
            elif channel == "both":
                logger.addHandler(handler_stream)
                logger.addHandler(handler_file)
                logger.info(f"[{count}] {msg}")
            else:
                exit("输入错误,程序退出")

    log_obj = logger("my.log",channel="both")

    print(next(log_obj))

    log_obj.send("user alex login success")
    log_obj.send("user hahaha login success")
    # 也可以输入其他的值 

生成器 通过 send() 发送值

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值