1. 項目中,日志和配置文件都是單獨在一個文件夾中,一般log文件夾和config文件夾,兩個文件夾和manage.py在同一個目錄下。
2. 配置日志前,先給flask裝上script腳本擴展,Flask 1.1.1 版本
from flask.ext.script import Manager # 報錯 no module named flask.ext 解決辦法:from flask_script import Manager 網上說是新版flask推薦這種方式導入擴展包 # 繼續報錯:no module named flask_script 解決辦法:pip install flask_script # 繼續報錯: ModuleNotFoundError: No module named 'setuptools' ---------------------------------------- ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. # 分析,原來是 沒有安裝 setuptools # 安裝 setuptools pip install setuptools # pip install flask_script # 然后解決問題 from flask_script import Manager
用Manager來管理app
manage.py
from logs.logs import create_app, setup_log from flask import url_for,redirect from flask_script import Manager from config.config import Config import logging app = create_app("development") # 這里通過一個函數創建了app的實例對象 manage = Manager(app) # 創建Manager的實例對象,參數是app對象 @app.route("/") def index(): logging.debug("測試打印日志") # logging.warning("測試打印日志") # logging.error("測試打印日志") return "index page" # 傳遞路徑參數,通過視圖函數的形參傳遞 @app.route("/hello/<username>") def hello(username): logging.debug(username) return "hello page" + username # 轉換器:可以將傳遞的參數進行類型轉換 @app.route("/user/<int:p_id>") def converter_int(p_id): logging.warning(str(p_id)) return "p_id: " + str(p_id) # 構建url @app.route("/new") def make_url(): """ url_for(視圖函數的名字,鏈接后面的參數) :return: """ new_url = url_for('hello', username="zhangyanyan") print(new_url) return redirect(new_url) if __name__ == '__main__':
manage.run() 啟動方式變成:manage.py目錄下,python manage.py runserver 啟動項目
logs/logs.py
import logging from logging.handlers import RotatingFileHandler from flask import Flask from config.config import config def setup_log(config_name): """ :param config_name: 傳入日志等級 :return: """ # 設置日志的的登記 logging.basicConfig(level=config[config_name].LOG_LEVEL) # 創建日志記錄器,設置日志的保存路徑和每個日志的大小和日志的總大小 file_log_handler = RotatingFileHandler("logs/log", maxBytes=1024*1024*100,backupCount=100) # 創建日志記錄格式,日志等級,輸出日志的文件名 行數 日志信息 formatter = logging.Formatter("%(levelname)s %(filename)s: %(lineno)d %(message)s") # 為日志記錄器設置記錄格式 file_log_handler.setFormatter(formatter) # 為全局的日志工具對象(flaks app使用的)加載日志記錄器 logging.getLogger().addHandler(file_log_handler) def create_app(config_name): """ :param config_name: info bug error :return: """ # 創建app實例前先配置好日志文件 setup_log(config_name) # 創建app實例對象 app = Flask(__name__) # 實例對象從配置文件中加載配置 app.config.from_object(config[config_name]) # 這里直接拿到的是類的名字,也就是引用 return app
config/config.py
import logging class Config(object): # 設置日志等級 LOG_LEVEL = logging.DEBUG class DevelopConfig(Config): """開發環境下的配置""" DEBUG = True class ProductConfig(Config): """生成環境下的配置""" DEBUG = False LOG_LEVEL = logging.WARNING class TestConfig(Config): """測試環境下的配置""" DEBUG = True TESTING = True config = { "development": DevelopConfig, "production": ProductConfig, "testing": TestConfig, }
logs/log文件
INFO _internal.py: 122 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) INFO _internal.py: 122 * Restarting with stat WARNING _internal.py: 122 * Debugger is active! INFO _internal.py: 122 * Debugger PIN: 340-059-688 DEBUG manage.py: 13 測試打印日志 WARNING manage.py: 14 測試打印日志 ERROR manage.py: 15 測試打印日志 INFO _internal.py: 122 127.0.0.1 - - [24/Nov/2019 15:10:29] "GET / HTTP/1.1" 200 - INFO _internal.py: 122 * Detected change in '/Users/xxx/PycharmProjects/flask_project1/manage.py', reloading INFO _internal.py: 122 * Restarting with stat WARNING _internal.py: 122 * Debugger is active! INFO _internal.py: 122 * Debugger PIN: 340-059-688 DEBUG manage.py: 22 zhang INFO _internal.py: 122 127.0.0.1 - - [24/Nov/2019 15:12:01] "GET /hello/zhang HTTP/1.1" 200 - INFO _internal.py: 122 * Detected change in '/Users/xxx/PycharmProjects/flask_project1/manage.py', reloading INFO _internal.py: 122 * Restarting with stat WARNING _internal.py: 122 * Debugger is active! INFO _internal.py: 122 * Debugger PIN: 340-059-688
config.py中還可以進行好多的配置
例如:數據庫的配置,密碼的配置
具體的配置參看:https://www.cnblogs.com/alicelai1319/p/10289798.html