記錄日誌作爲做項目最基本的功能之一,在Python中是通過Logging模塊實現的。簡單記錄一下Python Logging的模板,後續方便直接引用。
Logging的基本常識不在贅述,可以通過各種渠道學習。附上官網鏈接:https://docs.python.org/zh-cn/3.7/howto/logging.html#logging-basic-tutorial
整個模板的結構是:
一、核心是loggers.py
import logging
from logging.handlers import RotatingFileHandler
def init():
global root
# 定義類型爲RotatingFileHandler的handlers,非必須
filename = "log.txt"
fh = RotatingFileHandler(filename, maxBytes=1024, backupCount=3)
# logging配置信息
logging.basicConfig(
format="%(asctime)s %(name)s %(pathname)s[line:%(lineno)d] %(levelname)s: %(message)s",
level=logging.DEBUG,
handlers=[fh]
)
root = get()
def get(name=None):
return logging.getLogger(name)
通過logging.basicConfig定義Logging的基本配置信息,其中format定義日誌輸出格式、level定義輸出級別、handlers定義處理器(可以沒有)。
Logger是有層級關係的,這裏定義的root Logger是最頂層日誌器,我們通過定義函數get()去創建子Logger日誌。
二、core中存放業務代碼
在core中可以寫業務代碼,寫日誌的方式都比較熟悉,會有debug、info、error等,根據需要來即可。
from app import loggers
logs = loggers.get(__name__) # 創建子Logger
def message():
logs.debug("this is a debug message")
logs.debug("this is a warning message")
三、程序入口與結果
main.py中初始化Logger,並調用業務代碼
from app import loggers
from app.core import work1, work2
if __name__ == '__main__':
loggers.init()
work1.message()
work2.message()
記錄到的日誌信息,符合預期。
四、總結
基本上Python類的項目都可以沿用這個日誌模塊的模板,具體項目中可以不通過Handler去真的“記錄日誌”,比如通過k8s、gunicorn等組件,去“重定向”日誌信息也是可以的。