ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
日志在任何项目中都是非常重要的。尤其是在项目运行中,我们可以通过查看日志,排查遇到的各式各样的错误。 创建日志目录 ``` root@airvip:~/python_app/flask-demo# mkdir logs ``` `flask`可以通过 Python 提供的 `logging` 非常方便的记录日志 ### **改造下我们的项目初始化文件** 对 `app` 目录下的 ` __init__` 初始化文件进行如下改造,添加 `logging` 模块 ``` #!/usr/bin/env python3 # -*- encoding: utf-8 -*- from flask import Flask from flask_sqlalchemy import SQLAlchemy import logging from logging.handlers import RotatingFileHandler from config import config_map from app.utils.commons import ReCoverter # 创建数据库对象 db = SQLAlchemy() # 设置日志的记录级别 logging.basicConfig(level=logging.DEBUG) # 调试级别 debug # 创建日志记录器,指明日志保存路径、每个日志文件的最大大小 100Kb、保存的日志文件个数上限 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) # 工厂模式 def create_app(config_name): app = Flask(__name__) # 设置 flask 的配置信息 config_class = config_map[config_name] app.config.from_object(config_class) # 使用 app 初始化 db db.init_app(app) # 为 flask 添加自定义的转换器 app.url_map.converters["re"] = ReCoverter # 注册蓝图 from app import api_1_0 app.register_blueprint(api_1_0.bp, url_prefix="/api/v1.0") # from app import admin # app.register_blueprint(admin.bp, url_prefix="/admin") return app ``` ### **错误级别** | 级别 | 含义 | | --- | --- | | CRITICAL | 严重级别 | | ERROR | 错误级别 | | WARNING | 警告级别 | | INFO | 消息级别 | | DEBUG | 排除(一般开发阶段) | ### **日志属性** | 属性名 | 格式化 | 描述 | |---|---|---| | args | 不需要格式化 | 参数信息被合并在了错误信息中 | | asctime | %(asctime)s | 时间,默认格式 `2003-07-08 16:49:45,896` | | created | %(created)f | 日志被创建的时间 | | exc_info | 不需要格式化 | 异常元组,没有异常为`sys.exc_info` `None` | | filename | %(filename)s |文件名| | funcName | %(funcName)s | 方法名| | levelname | %(levelname)s | 级别名 | | levelno | %(levelno)s | 级别的数字标识 | | lineno | %(lineno)d | 出问题的行号| | message | %(message)s | 错误信息 | | module | %(module)s | 模块 | | msecs | %(msecs)d | 日志记录创建时间的毫秒部分 | | msg | 不需要格式化 | 错误信息 | | name | %(name)s | 日志名称| | pathname | %(pathname)s | 出问题的全路径名 | | process | %(process)d | 进程 ID | | processName | %(processName)s | 进程名 | | relativeCreated | %(relativeCreated)d | 相对于加载日志模块的时间,创建日志记录的时间(毫秒) | | thread | %(thread)d | 线程id| | threadName | %(threadName)s | 线程名称(如果可用)。 | 传送门:[Python内置logging模块使用文档 ](https://docs.python.org/3/library/logging.html#)