Flask中使用logging记录日志信息

在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+。

展开阅读全文