Flask中的 logging 使用

一、日志等级说明

  • 等级: DEBUG < INFO < WARNING < ERROR < CRITICAL
  • DEBUG : 最详细的日志信息,主要的应用场景问题的诊断,只限于开发人员使用的,用来在开发过程中进行调试
  • INFO : 详细程度仅次于debug模式,主要来记录关键节点的信息,确定程序是否正常如预期完成,一般的使用场景是重要的业务处理已经结束,我们通过这些INFO级别的日志信息,可以很快的了解应用正在做什么。
  • WARNING : 当某些不被期望的事情发生的时候,需要记录的信息,比如磁盘即将存满,注意当前的程序一依旧可以正常运行,不报错。也就是说发生这个级别的问题时,处理过程可以继续,但必须要对这个问题给予额外的关注。
  • ERROR : 出现严重问题,导致某些功能不能正常运行记录信息
  • CRITICAL: 系统即将崩溃或者已经崩溃

二、应用实例

2.1 简单使用demo
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')
    app.logger.addHandler(handler)
    app.run()
2.2 自定义设置打印格式(2+)
import logging.handlers

handler = logging.FileHandler('flask.log', encoding='UTF-8')
handler.setLevel(logging.DEBUG)
logging_format = logging.Formatter(
    '%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
handler.setFormatter(logging_format)
app.logger.addHandler(handler)
import logging
from logging.handlers import RotatingFileHandler

# 默认日志等级的设置
logging.basicConfig(level=logging.DEBUG)
# 创建日志记录器,指明日志保存路径,每个日志的大小,保存日志的上限
file_log_handler = RotatingFileHandler('WarningLogs.log', maxBytes=1024 * 1024, backupCount=10)
# 设置日志的格式                   发生时间    日志等级     日志信息文件名      函数名          行数        日志信息
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
# 将日志记录器指定日志的格式
file_log_handler.setFormatter(formatter)
# 日志等级的设置
# file_log_handler.setLevel(logging.WARNING)
# 为全局的日志工具对象添加日志记录器
logging.getLogger().addHandler(file_log_handler)
# 测试
app.logger.info('info log')
app.logger.debug('debug log')
app.logger.warning('warning log')
app.logger.error('error log')
app.logger.critical('critical')
2.3 自定义文件和格式设置
import os
import logging
import time
from logging.handlers import RotatingFileHandler

# log配置,实现日志自动按日期生成日志文件
def make_dir(make_dir_path):
    path = make_dir_path.strip()
    if not os.path.exists(path):
        os.makedirs(path)

log_dir_name = "Logs"
log_file_name = 'logs-' + time.strftime('%Y-%m-%d', time.localtime(time.time())) + '.log'
log_file_folder = os.path.abspath(
    os.path.join(os.path.dirname(__file__), os.pardir)) + os.sep + log_dir_name
make_dir(log_file_folder)
log_file_str = log_file_folder + os.sep + log_file_name

# 默认日志等级的设置
logging.basicConfig(level=logging.WARNING)
# 创建日志记录器,指明日志保存路径,每个日志的大小,保存日志的上限
file_log_handler = RotatingFileHandler(log_file_str, maxBytes=1024 * 1024, backupCount=10)
# 设置日志的格式                   发生时间    日志等级     日志信息文件名      函数名          行数        日志信息
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
# 将日志记录器指定日志的格式
file_log_handler.setFormatter(formatter)
# 日志等级的设置
# file_log_handler.setLevel(logging.WARNING)
# 为全局的日志工具对象添加日志记录器
logging.getLogger().addHandler(file_log_handler)

三、使用体验

  简单讲,logging的使用就是三个步骤:

  • 创建记录器
  • 日志的格式、等级设置
  • 添加记录器

四、日志记录等级设置

  如果是使用 logging.basicConfig(level=logging.DEBUG) 设置的话,那么使用 app.logger 打印的日志仍会不分等级均记录,而 系统运行日志 才会按照设置的等级进行记录。
  使用 file_log_handler.setLevel(logging.WARNING) 设置等级的话,那么不管是 app.logger 打印的日志 还是 系统运行日志 均按照设置等级进行记录。

五、日志格式的常用参数说明

参数 说明
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s 用户输出的消息

参考文章:【1】Flask-log,日志
     【2】如何优雅的在flask中记录log
     【3】python web开发-flask中日志的使用
     【4】Flask使用日志记录到文件示例
     【5】flask 日志集成
     【6】Logging — Flask Documentation (1.1.x)
     【7】logging.config — Logging configuration — Python 3.7.5rc1 documentation
     【8】logging — Logging facility for Python — Python 3.7.5rc1 documentation

发布了195 篇原创文章 · 获赞 139 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_39564555/article/details/102514816
今日推荐