一、python中的logging模块提供了日志的接口,过它存储各种格式的日志
日志的等级分为以下几种,日志的等级按照以下顺序依次提高,DEBUG < INFO < WARNING < ERROR < CRITICAL;但是日志的信息量是依次减少的,当指定一个日志级别之后,会记录大于或等于这个日志级别的日志信息,小于的将会被丢弃。
二、logging模块提供了两种记录日志的方式:
第一种方式是使用logging提供的模块级别的函数
第二种方式是使用Logging日志系统的四大组件
函数 说明
import logging
logging.debug("a")
logging.info("b")
logging.warning('c')
logging.error('d')
logging.critical('e')
只有后面三个打印出来了,因为默认级别是logging.warning,低于该级别的就不输出了
Logging.basicConfig()需要在开头就设置,在中间设置没有作用
通过logging.basicConfig可以设置root的日志级别,和日志输出格式
import logging
import time
import os
class mylog(object):
def __init__(self,logger_name):
#创建一个logger
self.logger= logging.getLogger(logger_name)
self.logger.setLevel(logging.INFO)
#设置日志存放路径,日志文件名
#获取本地时间,转换为设置的格式
rq = time.strftime('%Y%m%d%H%M',time.localtime(time.time()))
#设置所有日志和错误日志的存放路径
all_log_path = os.path.join(os.path.dirname(os.getcwd()),'Logs/All_Logs/')
error_log_path = os.path.join(os.path.dirname(os.getcwd()),'Logs/Error_Logs/')
#设置日志文件名
all_log_name = all_log_path + rq +'.log'
error_log_name = error_log_path + rq +'.log'
#创建handler
#创建一个handler写入所有日志
fh = logging.FileHandler(all_log_name)
fh.setLevel(logging.INFO)
#创建一个handler写入错误日志
eh = logging.FileHandler(error_log_name)
eh.setLevel(logging.ERROR)
#创建一个handler输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
#定义日志输出格式
#以时间-日志器名称-日志级别-日志内容的形式展示
all_log_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
#以时间-日志器名称-日志级别-文件名-函数行号-错误内容
error_log_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(module)s - %(lineno)s - %(message)s')
#将定义好的输出形式添加到handler
fh.setFormatter(all_log_formatter)
ch.setFormatter(all_log_formatter)
eh.setFormatter(error_log_formatter)
#给logger添加handler
self.logger.addHandler(fh)
self.logger.addHandler(eh)
self.logger.addHandler(ch)
def getlog(self):
return self.logger
测试代码:
from Common import logger
logger = logger.mylog('test').getlog()
try:
logger.info('开始测试...')
r = 10/0
logger.info('result:',r)
except ZeroDivisionError as e:
logger.error('tests',exc_info=1)
使用exc_info=1可以把报错信息完整的打印进日志