debug: 调试信息
info: 描述重要事件
warning:警告信息
error: 报错异常信息
critical: 严重错误
1)logger 日志器,提供了应用程序的接口
2)Handler 处理器,通过logger在不同位置输出日志
3)Formator 格式器,决定日志以什么样的格式显示
4)Filter 过滤器,过滤哪些需要记录输出,哪些需要丢弃
注:一个日志器,可以对应多个处理器;每个处理器可以有单独的格式器。
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
注:level: 设置日志级别,默认为logging.WARNING—需要用大写
具体的代码块如下
# coding:utf-8
import os
import logging
from logging import handlers
import sys
dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
LOG_ROOT = dirname
def get_logger(log_filename, level=logging.INFO, when='D', back_count=0):
"""
:brief 日志记录
:param log_filename: 日志名称
:param level: 日志等级
:param when: 间隔时间:
S:秒
M:分
H:小时
D:天
W:每星期(interval==0时代表星期一)
midnight: 每天凌晨
:param back_count: 备份文件的个数,若超过该值,就会自动删除
:return: logger
"""
# 创建一个日志器。提供了应用程序接口
logger = logging.getLogger(log_filename)
# 设置日志输出的最低等级,低于当前等级则会被忽略
logger.setLevel(level)
# 创建日志输出路径
log_path = os.path.join(LOG_ROOT, "logs")
if not os.path.exists(log_path):
os.mkdir(log_path)
log_file_path = os.path.join(log_path, log_filename)
# 创建格式器
formatter = logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
# 创建处理器:ch为控制台处理器,fh为文件处理器
ch = logging.StreamHandler()
ch.setLevel(level)
# 输出到文件
fh = logging.handlers.TimedRotatingFileHandler(
filename=log_file_path,
when=when,
backupCount=back_count,
encoding='utf-8')
fh.setLevel(level)
# 设置日志输出格式
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# 将处理器,添加至日志器中
logger.addHandler(fh)
logger.addHandler(ch)
return logger
用的时候只需要调用代码
logger = get_logger('store_data.log')
logger.info(f"----------------数据写入成功,正常退出------------------------")
参考文章连接