日志记录

一、日志作用

有时候程序问题/错误在本地环境不会复现,部署到正式环境才出现
通过日志记录程序运行信息,方便排查、了解程序运行状态。
从 Flask 0.3 版本开始,Flask 内置日志系统。

底层原理:Flask 的 app.logger 基于 Python 标准库 logging 实现。

二、日志级别(优先级从低→高)

级别数值说明
NOTSET0未设置
DEBUG10调试信息,开发细节
INFO20常规运行信息
WARNING30警告,程序可继续运行
ERROR40错误,部分功能失败
CRITICAL50严重故障,程序无法继续运行

日志规则:设置某个级别后,只输出大于等于该数值等级的日志

三、基础使用方式

Flask 实例自带 app.logger(标准 Logger 对象)

app.logger.debug('调试类型的日志')
app.logger.warning('一个警告类型的出现(%d数量)', 42)
app.logger.error('一个错误的出现')
app.logger.info("我的日志")Code language: JavaScript (javascript)

默认情况下,日志直接打印在控制台(终端屏幕)。

四、把日志保存到文件

1. 核心步骤

1)导入 logging

import loggingCode language: JavaScript (javascript)

2)使用 logging.basicConfig 配置日志输出路径、格式

logging.basicConfig(
    filename="D:\\flaskLog\\log.txt",
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)Code language: JavaScript (javascript)

格式参数说明:

  • %(asctime)s:日志时间
  • %(name)s:日志器名称
  • %(levelname)s:日志等级名称
  • %(message)s:日志消息

注意:Windows路径需要双反斜杠 \\

五、完整示例

from flask import Flask, session, redirect, url_for, escape, request
import logging

app = Flask(__name__)

# 配置日志写入文件
logging.basicConfig(
    filename="D:\\flaskLog\\log.txt",
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)

@app.route('/')
def index():
    if 'username' in session:
        return '当前登录用户是:%s' % escape(session['username'])

    # 输出不同等级日志
    app.logger.debug('调试类型的日志')
    app.logger.warning('一个警告类型的出现( %d数量)', 42)
    app.logger.error('一个错误的出现')
    app.logger.info("我的日志")

    return '你没有登录'Code language: PHP (php)

总结

  1. 运行访问路由 / 后,终端和日志文件都会生成对应日志;
  2. 示例日志输出样式:
[2018-07-18 12:55:27,567] WARNING in HelloBamn: 一个警告类型的出现( 42数量)
[2018-07-18 12:55:27,567] ERROR in HelloBamn: 一个错误的出现Code language: CSS (css)
  1. 生产环境推荐配置日志级别,过滤大量DEBUG信息,避免日志文件过大。

Previous:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注