一. 概述
寫本文的目的是我在寫 python 項目的時候需要記錄日志,我忘記怎么處理了,每次都需要去網上查一遍,好記性不如爛筆頭, 這里把查閱的內容記錄下來,方便以后查找。
python 項目中記錄日志,可以使用 logging 模塊,logging 模塊定義的函數和類為應用程序和庫的開發實現了一個靈活的事件日志系統。logging 模塊是Python的一個標准庫模塊,由標准庫模塊提供日志記錄API的關鍵好處是所有Python模塊都可以使用這個日志記錄功能。所以,你的應用日志可以將你自己的日志信息與來自第三方模塊的信息整合起來。
二. logging 配置
在 __init__.py
文件中做如下配置:
import logging.handlers
import os
# 設置日志文件的存放目錄
log_dir = 'logdir'
# 設置日志文件的名字
log_filename = 'app.log'
# 日志格式化輸出
LOG_FORMAT = "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"
# 日期格式
DATE_FORMAT = "%Y-%m-%d %H:%M:%S %p"
log_dir = os.path.dirname(os.getcwd()) + '/' + log_dir
if not os.path.exists(log_dir):
os.makedirs(log_dir)
log_filename = log_dir + '/' + log_filename
# 一個日志50M, 超過 app.log 指定的大小會自動滾動創建日志文件 app.log.1, app.log.2, app.log.3
fp = logging.handlers.RotatingFileHandler(log_filename, maxBytes=1024 * 1024 * 50,
backupCount=30,encoding='utf-8')
# 再創建一個handler,用於輸出到控制台
fs = logging.StreamHandler()
logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT, handlers=[fp, fs])
# 測試
if __name__ == '__main__':
logging.info("打印日志")
控制台輸出日志如下:
2021-11-10 19:33:59 PM - __init__.py[line:29] - INFO: 打印日志