<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送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#)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看