目录
一.日志模块的使用主要包括以下四部分
1.创建日志器并设置输出级别
# 创建日志器
logger = logging.getLogger("")
# 设置输出级别,仅当日志级别高于设置的DEBUG级别时会被logger捕获
logger.setLevel(logging.DEBUG)
2.创建日志处理器
# 创建文件处理器
rotatingFileHandler = logging.handlers.RotatingFileHandler( filename="日志文件的地址", maxBytes=1024 * 1024 * 50, backupCount=5 )
# 创建控制台处理器
console = logging.StreamHandler()
3.为处理器设置格式及级别
# 设置输出格式
formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s')
rotatingFileHandler.setFormatter(formatter)
console.setFormatter(formatter)
# 设置处理器日志级别,仅当被logger捕获的日志高于handler设置的级别时,handler才会处理该日志
console.setLevel(logging.NOTSET)
4.为日志器添加处理器
logger.addHandler(console)
logger.addHandler(rotatingFileHandler)
根据上述四部设置好以后,即可通过logger.info('mesg')打印所需的日志到文件及控制台
二.日志模块封装
主要思路为定义一个类如LogUtil,并将定义好的logger作为其属性,再将logger.info等日志打印方法封装在类中为info,即可通过LogUtil().info('mesg')的方式在框架中使用封装好的日志模块
import logging
import logging.handlers
import os
import time
from config import base_dir
class LogUtil(object):
def __init__(self):
self.logger = logging.getLogger("")
# 创建文件目录
logs_dir = "%s/output/logs" % base_dir
if os.path.exists(logs_dir) and os.path.isdir(logs_dir):
pass
else:
os.mkdir(logs_dir)
# 创建handlers前检查是否存在,避免重复创建导致打印重复的日志
if not self.logger.hasHandlers():
# 修改log保存位置
timestamp = time.strftime("%Y%m%d", time.localtime())
logfilename = '%sOkayProject.txt' % timestamp
logfilepath = os.path.join(logs_dir, logfilename)
rotatingFileHandler = logging.handlers.RotatingFileHandler(filename=logfilepath, maxBytes=1024 * 1024 * 50, encoding="utf-8", backupCount=5)
# 设置输出格式
formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s')
rotatingFileHandler.setFormatter(formatter)
# 控制台句柄
console = logging.StreamHandler()
console.setLevel(logging.NOTSET)
console.setFormatter(formatter)
# 添加内容到日志句柄中
self.logger.addHandler(console)
self.logger.addHandler(rotatingFileHandler)
self.logger.setLevel(logging.DEBUG)
# 封装打印各级别日志的方法
def info(self, message):
self.logger.info(message)
def debug(self, message):
self.logger.debug(message)
def warning(self, message):
self.logger.warning(message)
def error(self, message):
self.logger.error(message)
# 输出日志的示例
# log_text = "name:%s,url:%s,reponse:%s" % (name, url, rep)
# LogUtil().info(log_text)
# LogUtil().error(traceback.format_exc())
参考来源: