为用户处理模块增加 log 管理
作为一个程序员,log 管理几乎是必备技能,本小节将在原来代码的基础上,增加 log 管理,以方便调试。进入 log 目录,并创建 users 目录。
进入 users_views.py
,导入 logging
模块,并指定 log 目录文件(log/users/users.log
),指定 log 级别(DEBUG
)和 log 保留方式(这里设定按天保存,保留 30 天的 log 记录),并在处理方法中加入对应的 log 信息。
users_views.py
的完整代码如下:
python
#! /usr/bin/python3
# -*- coding:utf-8 -*-
import tornado.web
from tornado.escape import json_decode
import logging
from logging.handlers import TimedRotatingFileHandler
#从commons中导入http_response方法
from common.commons import (
http_response,
)
#从配置文件中导入错误码
from conf.base import (
ERROR_CODE,
)
########## Configure logging #############
logFilePath = "log/users/users.log"
logger = logging.getLogger("Users")
logger.setLevel(logging.DEBUG)
handler = TimedRotatingFileHandler(logFilePath,
when="D",
interval=1,
backupCount=30)
formatter = logging.Formatter('%(asctime)s \
%(filename)s[line:%(lineno)d] %(levelname)s %(message)s',)
handler.suffix = "%Y%m%d"
handler.setFormatter(formatter)
logger.addHandler(handler)
class RegistHandle(tornado.web.RequestHandler):
"""handle /user/regist request
:param phone: users sign up phone
:param password: users sign up password
:param code: users sign up code, must six digital code
"""
def post(self):
try:
#获取入参
args = json_decode(self.request.body)
phone = args['phone']
password = args['password']
verify_code = args['code']
except:
#获取入参失败时,抛出错误码及错误信息
logger.info("RegistHandle: request argument incorrect")
http_response(self, ERROR_CODE['1001'], 1001)
return
#处理成功后,返回成功码“0”及成功信息“ok”
logger.debug("RegistHandle: regist successfully")
http_response(self, ERROR_CODE['0'], 0)
再次执行 main.py
HTTP 客户端发起正确的注册请求
查看 log/users/users.log
在日志文件中,日志的格式包含时间、文件名、打印代码行数、log 级别和自定义 log 信息。这些信息足以满足问题定位及排错。在前面的配置信息中,我们定义的 log 级别是 DEBUG
,下面看看入参出错时,报的 INFO
日志。
查看 log/users/users.log
这里看到日志文件中多出了一行日志,级别为 INFO。前面我们也提到,我们定义了日志文件的记录保留,本小册由于是新建讲解项目,还无法直接查看日志保留记录。这里贴出之前项目的记录,可以看到历史保留文件是以天为后缀的,当天的文件还是在 users.log
中。
代码下载
到目前为止,服务器端代码如下:
demo7
小结
本小节简单介绍了日志服务在服务器端开发中的应用,开发者可以自定义 log 级别及其历史保留记录。开发者可以根据自己的喜好及习惯,去定义具体的级别和信息。下一小节,我们将讲解如何利用 ORM 的方式和数据库打交道,并将用户注册信息写入数据库中。