微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【Python】Flask日志记录:将日志输出到多个文件、显示行号、模块名称、日志级别等

参考文章:Flask使用日志记录到文件示例-博客园

flask的日志记录需要用到python标准库logging的支持

示例

# -*- coding: utf-8 -*-

from flask import Flask
import logging

app = Flask(__name__)


@app.route('/')
def root():
    app.logger.info('info log')
    app.logger.warning('warning log')
    return 'hello'

if __name__ == '__main__':
    app.debug = True
    handler = logging.FileHandler('flask.log', encoding='UTF-8')
    handler.setLevel(logging.DEBUG) # 设置日志记录最低级别为DEBUG,低于DEBUG级别的日志记录会被忽略,不设置setLevel()则认为NOTSET级别。
    logging_format = logging.Formatter(
        '%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
    handler.setFormatter(logging_format)
    app.logger.addHandler(handler)
    app.run()

控制日志记录格式,效果如上述记录内容;在Python参考文档中有更详细的说明,这里简单介绍一下:

%(asctime)s 即日志记录时间,精确到毫秒
%(levelname)s 即此条日志级别
%(filename)s 即触发日志记录的python文件
%(funcName)s 即触发日志记录的函数
%(lineno)s 即触发日志记录代码的行号
%(message)s 这项即调用如app.logger.info(‘info log’)中的参数,即message

日志文件:flask.log

2019-11-08 23:18:51,769 - INFO - manager.py - root - 10 - info log
2019-11-08 23:18:51,770 - WARNING - manager.py - root - 11 - warning log


将日志输出到多个文件

示例如下,产生log1.log和log2.log两个日志文件
同理,可以灵活地将不同模块中的日志加以区分,输出到不同文件中。例如,views.py

在这里插入图片描述

from __future__ import absolute_import

import logging

def setup_logger(logger_name, log_file, level=logging.INFO):
    l = logging.getLogger(logger_name)
    formatter = logging.Formatter('%(asctime)s : %(message)s')
    fileHandler = logging.FileHandler(log_file, mode='w')
    fileHandler.setFormatter(formatter)
    streamHandler = logging.StreamHandler()
    streamHandler.setFormatter(formatter)

    l.setLevel(level)
    l.addHandler(fileHandler)
    l.addHandler(streamHandler)

def main():
    setup_logger('log1', r'log1.log')
    setup_logger('log2', r'log2.log')
    log1 = logging.getLogger('log1')
    log2 = logging.getLogger('log2')

    log1.info('Info for log 1!')
    log2.info('Info for log 2!')
    log1.error('Oh, no! Something went wrong!')

if '__main__' == __name__:
    main()
 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐