日志在任何項目中都是非常重要的。尤其是在項目運行中,我們可以通過查看日志,排查遇到的各式各樣的錯誤。
創建日志目錄
```
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#)