在flask中使用日志记录功能,flask中日志使用的是python标准库logging。我的目标是将网站的信息记录到文件,保存在磁盘上以便查询。
1. 在python中使用logging将日志信息保存到磁盘文件
import logging
from logging.handlers import RotatingFileHandler
def logging_filehandle():
handler = RotatingFileHandler('search_book.log', maxBytes=1024 * 1024 * 20, backupCount=3)
handler.setLevel(logging.INFO)
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s', handlers=[handler], datefmt='%Y-%m-%d %H:%M:%S')
ip = '127.0.0.1'
logging.debug(f'info...{ip}')
logging.info(f'info...{ip}')
logging.warning(f'warning...{ip}')
logging.error(f'error...{ip}')
if __name__ == '__main__':
logging_filehandle()
以上代码会在当前目录下生成 search_book.log 文件,文件不能超过20M,可以顺序轮询3次。详见文档。
在 search_book.log 文件中按照定义的格式生成
2018-11-01 15:50:19 - info...127.0.0.1
2018-11-01 15:50:19 - warning...127.0.0.1
2018-11-01 15:50:19 - error...127.0.0.1
2. 在flask中使用logging记录日志信息,消息记录在flask logger命名空间下。
log = None
def init_logging(app):
global log
log = app.logger
log.setLevel(logging.INFO)
handler = RotatingFileHandler('search_book.log', maxBytes=1024 * 1024 * 20, backupCount=3)
formatter = logging.Formatter(fmt='%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
handler.setFormatter(formatter)
handler.setLevel(logging.INFO)
log.addHandler(handler)
# logging
ip = request.remote_addr
name = 'abc'
log.info(f'{ip} - {name}')
主要将python标准库中Logger改成flask中的app.logger。f'' 是f-strings表达式,需要python3.6+。