1、新建config.py文件于项目根目录
2、编辑config.py文件
import os
class Config(object):
ROOT = os.path.dirname(os.path.abspath(__file__))
LOG_NAME = os.path.join(ROOT, 'logs', 'hapi.log')
目前仅仅添加了根目录配置和log文件路径配置,后续会添加更多的配置。
3、修改hapi/app/__init__.py文件,引入配置文件
from flask import Flask
from config import Config
hapi = Flask(__name__)
hapi.config.from_object(Config)
根据需要我们还可以去配置日志在不同环境下的不同等级监控。
4、日志需求
我们开发时候总会遇到一些非必现的问题,所以需要我们通过一些手段将问题写入日志,方便后续去排查产生问题的原因。
5、日志模块选用
logging
在Python中有系统自带的功能及其强大的logging模块供我们使用,它的强大不多做介绍了。网上的demo很多,稍微copy一个日志类就能使用。
logbook
这里我采用的是github上的logbook库,单看api调用的话,比logging方便较多。可能因为我是个比较懒的人。
6、安装logbook
pip3 install logbook
7、日志模块规划为一个工具类,在app/utils下
编辑utils/logger.py文件
import logbook
from app import hapi
class Log(object):
handler = None
def __init__(self, name='hapi', filename=hapi.config['LOG_NAME']):
'''
:param name: 业务名称
:param filename: 文件名称
'''
self.handler = logbook.FileHandler(filename, encodings='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类中。
8、修改run.py
from app import hapi
from app.utils.logger import Log
@hapi.route('/')
def hello_world():
log = Log("hello world专用")
log.info("有人访问你的网站了")
return 'Hello World!'
if __name__ == "__main__":
hapi.run("0.0.0.0", threaded=True, port="6677")
运行报错,发现缺少log目录,在hapi目录下手动创建。
再次运行服务则成功。