前置条件:
一、首先我们要知道日志分别哪几个级别:5个级别
debug(调试)<info(程序正常运行输出的日志)<warning(警告)<error(错误)<critical(致命错误程序崩溃)
备注:优先级从小到大,也就是说前面一个级别的日志包括后面级别的日志,比如输出debug级别日志包括info,warning,error,critical级别的日志
二、其次我们要考虑日志的格式:
%(name)s : 日志收集渠道的名称
%(levelno)s :日志级别对应的数值
%(levelname)s : 日志级别名称 ("DEBUG", "INFO","WARNING", "ERROR", "CRITICAL")
%(pathname)s :输出日志的文件的绝对路径(有.py后缀)
%(filename)s :输出日志的py文件的名称(有.py后缀)
%(module)s: 输出日志的py文件的名称(没有有.py后缀)
%(lineno)d:输出日志的行数
%(funcName)s:输出日志的函数名称,如果不是函数输出,那就输出py文件名称(%(module)s)
%(created)f :日志输出的时间,格式为时间戳,time.time()
%(asctime)s:日志输出的时间,格式(年-月-日 时:分:秒,毫秒)
%(msecs)d :日志输出时间的毫秒
%(relativeCreated)d : 日志输出的相对时间
%(thread)d :输出日志的线程id
%(threadName)s :输出日志的线程名称
%(process)d:输出日志的进程id
%(message)s :日志内容
备注:按需要去设置
正式开始正式日志收集流程:
先导入日志模块,然后导入渠道方法
- 创建日志收集器
- 创建日志收集渠道
- 创建日志格式
- 渠道绑定日志格式
- 日志收集器设置日志级别
- 给日志收集器绑定渠道
import logging
from logging import handlers
#设置日志收集器
py48 = logging.getLogger("py48")
#设置日志收集渠道
file = handlers.TimedRotatingFileHandler(filename = "py48.log", when='D', interval=1,encoding="utf-8")
#创建日志格式
fmt = "%(asctime)s-%(name)s-%(levelno)s-%(filename)s-%(funcName)s-%(message)s"
file_fmt = logging.Formatter(fmt=fmt)
#渠道绑定日志格式
file.setFormatter(fmt=file_fmt)
#日志收集器设置日志级别
py48.setLevel(level=logging.DEBUG)
file.setLevel(level=logging.INFO)
#给日志收集器绑定渠道
py48.addHandler(file)
py48.debug(msg= "这里是日志信息1")
py48.debug(msg= "这里是日志信息2")
py48.info(msg= "这里是日志信息3")
py48.error(msg= "这里是日志信息4")
py48.critical(msg= "这里是日志信息5")
封装日志收集
import logging
from logging import handlers
def my_log():
py48 = logging.getLogger(name="py48") #创建日志收集器
file = handlers.TimedRotatingFileHandler(filename="text.log", when='D', interval=1, encoding="utf-8") #创建日志渠道
fmt = "%(asctime)s-%(name)s-%(levelno)s-%(filename)s-%(funcName)s-%(message)s"
log_fmt = logging.Formatter(fmt=fmt) #创建日志格式
file.setFormatter(fmt=log_fmt) #给渠道绑定日志格式
py48.setLevel(level=logging.DEBUG) #给日志收集器设置日志级别
file.setLevel(level=logging.INFO) #给渠道设置日志级别
py48.addHandler(file) #给日志收集器绑定渠道
return py48
logs = my_log() #实列话方法
logs.info(msg="test01") #调用
# logs.info(msg="test02")
# logs.info(msg="test03")
备注:封装后,可以直接调用,也方便在其他模块直接导入调用
from demo03 import logs
logs.info(msg="test123")
logs.info(msg="test23")
logs.info(msg="test3")
logs.info(msg="test4")
欢迎来到testingpai.com!
注册 关于