首页 > 其他分享 >测试平台系列(3) 给Hello World添加日志

测试平台系列(3) 给Hello World添加日志

时间:2023-02-21 15:47:20浏览次数:47  
标签:pity self args kwargs World 日志 Hello def

给Hello World添加日志

回顾

通过上篇内容,我们已经使用Flask完成了我们的第一个接口。我们可以看到,使用Flask来编写接口是十分简单的。那么接下来,我们丰富一下上面的例子。

需求

现在的需求来了,在我们平时的开发过程中,总会遇到一些问题。但是又不是必现的,所以我们可以通过一些手段来写入日志,去发现问题。一个很明显的例子就是try/exception,遇到未知问题的时候可以将问题记录至日志并在事后排查。


日志模块选用

logging

我们知道,在Python中有系统自带的功能及其强大的logging模块供我们使用,它的强大不多做介绍了。网上的demo很多,稍微copy一个日志类就能使用。

logbook

这里我采用的是github上的logbook库,单看api调用的话,比logging方便较多。可能因为我是个喜欢尝鲜的人^_^

安装logbook

在终端输入pip3 install logbook并回车。

分类

日志模块属于pity的工具类,笔者将之划分到app/utils下。

编写日志类

import logbook

from app import pity


class Log(object):
    handler = None

    def __init__(self, name='pity', filename=pity.config['LOG_NAME']):  # Logger标识默认为app
        """
        :param name: 业务名称
        :param filename: 文件名称
        """
        self.handler = logbook.FileHandler(filename, encoding='utf-8')
        self.logger = logbook.Logger(name)
        self.handler.push_application()

    def info(self, *args, **kwargs):
        return self.logger.info(*args, **kwargs)

    def error(self, *args, **kwargs):
        return self.logger.error(*args, **kwargs)

    def warning(self, *args, **kwargs):
        return self.logger.warning(*args, **kwargs)

    def debug(self, *args, **kwargs):
        return self.logger.debug(*args, **kwargs)


复制代码

在这里,我们定义了一个Log类,这个类接受的name是日志的分类,如果不传入则默认为**「pity」**,filename(日志文件名)默认值为引入config.py中配置的LOG_NAME

然后将logbook中的handler设为写入的文件,并将info/error/warning/debug等常用方法封装在Log类中。

修改run.py

from app import pity
from app.utils.logger import Log

@pity.route('/')
def hello_world():
    log = Log("hello world专用")
    log.info("有人访问你的网站了")
    return 'Hello World!'


if __name__ == '__main__':
    pity.run("0.0.0.0", threaded=True, port="7777")


复制代码

运行run.py

进入浏览器输入http://localhost:7777

图片

报错截图

发现居然报错了,我们仔细查看下控制台:

 

 

控制台报错信息

看提示是没有找到对应的文件或目录, 原来我们的pity目录下没有logs目录, 而这种日志库一般也不会帮忙创建目录,所以我们暂时手动在pity目录下建立logs目录即可。

建立以后重启服务, 再次尝试

图片

成功截图

查看logs/pity.log文件

图片

可以看到,日志文件配置生效,妈妈再也不用担心我意外出错了。


将日志类改为单例模式(选修课)

  • 编辑utils/decorator.py
'''
    这是一个装饰器方法文件
'''


class SingletonDecorator:
    def __init__(self, cls):
        self.cls = cls
        self.instance = None

    def __call__(self, *args, **kwds):
        if self.instance is None:
            self.instance = self.cls(*args, **kwds)
        return self.instance

复制代码

如图所示,这是一个单例类的装饰器。首先判断该类的实例是否是None,为None的话则生成新实例,否则返回该实例。这样就确保了只生成一次实例。

当然这只是一个办法,可能在多线程的情况下会出问题。后续的优化和了解,就交给同学们自己了。

  • 给Log类加上装饰器
import logbook

from app import pity
from .decorator import SingletonDecorator


# 注意这里
@SingletonDecorator
class Log(object):
    handler = None

    def __init__(self, name='pity', filename=pity.config['LOG_NAME']):  # Logger标识默认为app
        """
        :param name: 业务名称
        :param filename: 文件名称
        """
        self.handler = logbook.FileHandler(filename, encoding='utf-8')
        self.logger = logbook.Logger(name)
        self.handler.push_application()

    def info(self, *args, **kwargs):
        return self.logger.info(*args, **kwargs)

    def error(self, *args, **kwargs):
        return self.logger.error(*args, **kwargs)

    def warning(self, *args, **kwargs):
        return self.logger.warning(*args, **kwargs)

    def debug(self, *args, **kwargs):
        return self.logger.debug(*args, **kwargs)


复制代码

作业

发现一个小问题,日志的时间似乎不对,可能是哪里出了问题呢?

全部代码地址: github.com/wuranxu/pit…

「觉得有用的话可以帮忙点个Star哦QAQ」


作者:米洛丶
链接:https://juejin.cn/post/6978313960650965029
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:pity,self,args,kwargs,World,日志,Hello,def
From: https://www.cnblogs.com/alamZ/p/17141185.html

相关文章

  • 0x02_My-OS操作系统里的helloworld
      直接看目录结构│main.c(可以调用asm的函数,可以使用最原始的c语言,你要明白基本所有头文件都要用汇编自己造)│Makefile(make脚本)├─asm│asmhead.asm(别......
  • PHP 日志专题
    PHP堆栈跟踪(phpstacktrace)PHPmessage:PHPStacktrace:PHPmessage:PHP1.{main}()/home/www/ford4s/public/index.php:0PHPmessage:PHP2.AMAI\Applicat......
  • 查看版本日志 git 230220
    查看提交日志简易日志gitlog--oneline完整日志gitlog......
  • flume + kafka 读取 nginx日志 并同步到clickhouse
    1.kafka安装运行kafka中包含了zookeeper,无需单独安装zookeeper先启动zookeeperbin/zookeeper-server-start.sh-daemonconfig/zookeeper.properties然后启动kafka......
  • javaEE007.03 JSP简介、helloworld、运行原理(包含新建JSP、默认字符设置 C#中叫aspx)
    系列文章目录文章目录​​系列文章目录​​​​前言​​​​一、JSP简介​​​​简介​​​​二、helloworld——怎么写java代码​​​​二、、运行原理​​​​总结​​......
  • rsyslog由于RateLimit丢失日志的处理
    问题问题的发现:在我们的docker应用中,配置了rsyslog作为日志输出;当应用产生的日志在某段时间内量比较大时,就发现会丢日志。原因问题的原因:日志的输出路径,应用程序把......
  • HelloMsg
    /*--------------------------------------------------------------HelloMsg.c--Displays"Hello,Windows98!"inamessagebox(c)Charles......
  • 开发日志
    开发日志:1.今天下午在尝试搭建SpringBoot的新项目,目的是使用SpringBoot快速开发新的应用程序。开始时,先前的经验告诉我,SpringBoot有自己独特的方式创建项目,需要创建一个M......
  • 1 [初识]Vue3教程简介与Hello World编写 原创
    阅读目录​​前置知识​​​​下载VSCode​​​​编写第一个HelloWorld​​​​直接引入Vue3.x源码​​前置知识但是你还是需要会下面最基本的知识:1、HTML:超文本标记语......
  • Linux系统的日志管理
    (Linux系统的日志管理)一、systemd-journald服务1.systemd-journald介绍#系统时间日志的核心服务#收集包括来自内核,早期引导阶段啊,进程启动,运行时的标准输出和错误输......