flask日志

匿名 (未验证) 提交于 2019-12-02 22:11:45

Python 自身提供了一个用于记录日志的标准库模块:logging。

  • logging 模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统
  • logging 模块是 Python 的一个标准库模块,由标准库模块提供日志记录 API 的关键好处是所有 Python 模块都可以使用这个日志记录功能。
  • logging模块默认定义了以下几个日志等级,它允许开发人员自定义其他日志级别,但是这是不被推荐的,尤其是在开发供别人使用的库时,因为这会导致日志级别的混乱。
    • DEBUG 最详细的日志信息,典型应用场景是 问题诊断
    • INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
    • WARNING 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
    • ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息
    • FATAL/CRITICAL 整个系统即将/完全崩溃
  • 开发应用程序或部署开发环境时,可以使用 DEBUG 或 INFO 级别的日志获取尽可能详细的日志信息来进行开发或部署调试;
  • 应用上线或部署生产环境时,应该使用 WARNING 或 ERROR 或 CRITICAL 级别的日志来降低机器的I/O压力和提高获取错误日志信息的效率。

日志级别的指定通常都是在应用程序的配置文件中进行指定的。

  • loggers 提供应用程序代码直接使用的接口
  • handlers 用于将日志记录发送到指定的目的位置
  • filters 提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略)
  • formatters 用于控制日志信息的最终输出格式
# 设置日志的记录等级 logging.basicConfig(level=logging.DEBUG) # 调试debug级 # 创建日志记录器,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限 file_log_handler = RotatingFileHandler("logs/log", maxBytes=1024*1024*100, backupCount=10) # 创建日志记录的格式 日志等级 输入日志信息的文件名 行数 日志信息 formatter = logging.Formatter('%(levelname)s %(filename)s:%(lineno)d %(message)s') # 为刚创建的日志记录器设置日志记录格式 file_log_handler.setFormatter(formatter) # 为全局的日志工具对象(flask app使用的)添加日志记录器 logging.getLogger().addHandler(file_log_handler) 
  • 先来试着分别输出一条不同日志级别的日志记录:
import logging  logging.debug("This is a debug log.") logging.info("This is a info log.") logging.warning("This is a warning log.") logging.error("This is a error log.") logging.critical("This is a critical log.") 
  • 也可以这样写:
logging.log(logging.DEBUG, "This is a debug log.") logging.log(logging.INFO, "This is a info log.") logging.log(logging.WARNING, "This is a warning log.") logging.log(logging.ERROR, "This is a error log.") logging.log(logging.CRITICAL, "This is a critical log.") 
logging.basicConfig(level=logging.DEBUG) 

Configurations

  • config.py
class Config(object):     ...      # 默认日志等级     LOG_LEVEL = logging.DEBUG   class ProductionConfig(Config):     """生产模式下的配置"""     LOG_LEVEL = logging.ERROR 
  • infoinit.py
def setup_log(config_name):     """配置日志"""      # 设置日志的记录等级     logging.basicConfig(level=config[config_name].LOG_LEVEL)  # 调试debug级     # 创建日志记录器,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限     file_log_handler = RotatingFileHandler("logs/log", maxBytes=1024 * 1024 * 100, backupCount=10)     # 创建日志记录的格式 日志等级 输入日志信息的文件名 行数 日志信息     formatter = logging.Formatter('%(levelname)s %(filename)s:%(lineno)d %(message)s')     # 为刚创建的日志记录器设置日志记录格式     file_log_handler.setFormatter(formatter)     # 为全局的日志工具对象(flask app使用的)添加日志记录器     logging.getLogger().addHandler(file_log_handler) 
  • create_appconfig_name
def create_app(config_name):     ...      # 配置项目日志     setup_log(config_name)     app = Flask(__name__)     ... 
  • logs,如下:
  • logs

    • 在 logs 文件夹下创建 .gitkeep 文件,以便能将 logs 文件夹添加到远程仓库,并在 .gitignore 文件中添加忽略提交生成的日志文件
    logs/log* 

    在 Flask框架 中,其自己对 Python 的 logging 进行了封装,在 Flask 应用程序中,可以以如下方式进行输出 log:

    current_app.logger.debug('debug') current_app.logger.error('error')
  • 当前应用程序的 logger 会根据应用程序的调试状态去调整日志级别,如下图:

文章来源: flask日志
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!