记录日志作为做项目最基本的功能之一,在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等组件,去“重定向”日志信息也是可以的。