本文最后更新于 1459 天前,其中的信息可能已经有所发展或是发生改变。
简介
web.py自带有webserver日志,会在运行的时候输出到控制台;如果我们需要记录日志,可以用wsgilog来操作内置的webserver的日志,并做其为中间件加到应用中。
官网推荐的案例链接:https://webpy.org/cookbook/logging.zh-cn
本案例以官网推荐的方式就进行改造。
教程
1.公共参数
配置一个公共参数的文件,用于日志的参数。
util/config.py
# -*- coding: UTF-8 -*-
import logging
# 日志文件路径
file = "logs/webpy.log"
# 日志格式
logformat = "[%(asctime)s] %(filename)s:%(lineno)d(%(funcName)s): [%(levelname)s] %(message)s"
#日志中显示的时间格式
datefmt = "%Y-%m-%d %H:%M:%S"
#日志级别
loglevel = logging.INFO
#每隔一天生成一个日志文件
interval = "d"
#后台保留日志文件的数量
backups = 10
2.编写Log类
写一个Log类继承wsgilog.WsgiLog,在init中把参数传给基类。
注意:这里引入的是LogStdout而不是官网的LogIO,最新版有所变动。
util/log.py
# -*- coding: UTF-8 -*-
import sys,logging
from wsgilog import WsgiLog, LogStdout
import util.config
class Log(WsgiLog):
def __init__(self, application):
WsgiLog.__init__(
self,
application,
logformat=util.config.logformat,
datefmt=util.config.datefmt,
tofile=True,
file=util.config.file,
interval=util.config.interval,
backups=util.config.backups,
toprint=True,
prnlevel=util.config.loglevel,
)
#将控制台输出放入INFO级别的日志
sys.stdout = LogStdout(self.logger, logging.INFO)
#将错误日志放入ERROR级别的日志
sys.stderr = LogStdout(self.logger, logging.ERROR)
3.应用启动传递应用
import web
from util.log import Log
#关闭调试模式
web.config.debug = False
urls = (
'/favicon.ico','favicon',
)
app = web.application(urls, globals())
app.run(Log)