本地网站建设电话,广州建筑信息平台,动漫制作公司排名,山东省建设监理协会网站目录
logging模块
logging核心组件
logger
handler StreamHandler#xff1a;把日志内容在控制台中输出 FileHandler#xff1a;把日志内容写入到文件中
filter
formatter
注意日志级别的继承问题
logger.exception
上述样例的整体代码 日志的配置文件及其模板 lo…目录
logging模块
logging核心组件
logger
handler StreamHandler把日志内容在控制台中输出 FileHandler把日志内容写入到文件中
filter
formatter
注意日志级别的继承问题
logger.exception
上述样例的整体代码 日志的配置文件及其模板 logging模块 logging是Python的内置日志模块用于生成程序日志。l logging有五个日志级别从低到高进行排序DEBUG、INFO、WARMING、ERROR、CRITICAL。日志内容的记录只会记录当前设定等级及其以上的等级例如级别为WARMING日志的内容就只会记录WARMING、ERROR、CRITICAL这三个级别的内容 logger默认的级别是warming logging核心组件 logger记录器可以实例化多个记录器用于记录不同的日志要求 handler处理器可以定义多个处理器处理不同的日志保存或发送要求 filter过滤器可以对记录器的选择进行筛选 formatter格式器可以对日志的内容进行格式化要求 logger logging.getLogger() 定义多个logger通过不同的名字的来创建不同的looger loggin.setLevel() 定义记录器的日志级别
first_logger logging.getLogger(nameFirstLogger)
second_logger logging.getLogger(nameSecondLogger)
second_logger.setLevel(logging.DEBUG)
print(ffirst_logger:{first_logger})
print(fsecond_logger:{second_logger}) handler 两个经常使用的handler StreamHandler把日志内容在控制台中输出 参数为None也可选 sys.stderr、 sys.stdout stdout,stderr的中文名字分别是标准输入标准输出和标准错误
stream_handler logging.StreamHandler(streamNone)formatter logging.Formatter(%(asctime)s - %(levelname)s - %(message)s)
first_logger.addHandler(stream_handler)
stream_handler.setFormatter(formatter)
first_logger.warning(warning text,) FileHandler把日志内容写入到文件中 3个主要参数filename、mode、encoding、分别是文件名、写入模式、编码格式大致跟一般的写入文件一致
file_handler logging.FileHandler(filenamefile_log,modea,encodingutf-8)formatter logging.Formatter(%(asctime)s - %(levelname)s - %(message)s)
first_logger.addHandler(file_handler)
file_handler.setFormatter(formatter)
first_logger.warning(warning text,)filter logging.Filter() 可以过滤使用不同的记录器可以设置记录器的名字是否与过滤条件一致 例如 second_logger记录器的名字为【SecondLogger】 third_logger记录器的名字为【aabb.ccthird_logger】而过滤器的格式为【aabb.cc】 两个过滤器都是使用StreamHandler但是最终只有third_logger的日志内容被打印因为只有third_logger的名字满足过滤器的条件
third_logger logging.getLogger(aabb.ccthird_logger)
third_logger.warning(123)flt logging.Filter(aabb.cc)
third_logger.addFilter(flt)
second_logger.addHandler(stream_handler)
second_logger.addFilter(flt)
second_logger.error(error text) formatter logging.Formatter() 可以设置不同日志内容格式根据自身所需进行格式的规定 主要参数介绍 %(asctime)s打印日志的时间 %(levelname)s打印日志级别的名称 %(message)s打印日志信息 %(filename)s打印当前执行程序名 %(processName)s打印线程名称 datefmt指定时间的输出格式
formatter logging.Formatter(%(asctime)s - %(levelname)s - %(filename)s - %(message)s,datefmt%Y-%m-%d %H:%M) 注意日志级别的继承问题
没有指定日志级别默认是WARMING
logger和handler都可以指定日志级别最终已handler的为主但是这里有一个点需要特别注意
可能在指定日志级别会出现的问题明明handler定义了DEBUG级别可是输出时没有内容这是因为如果logger没有指定级别他会默认继承WARMING的最小级别低于此级别的不会记录所以要想设置handler的级别建议最好先指定logger级别为DEBUG再指定handler的级别
first_logger logging.getLogger(nameFirstLogger)
# 没有设置logger的日志级别
# stream_handler.setLevel(logging.INFO)stream_handler logging.StreamHandler(streamsys.stdout)
stream_handler.setLevel(logging.DEBUG)
first_logger.debug(debug output)# 结果没有任何输出 设置完logger的日志级别后才能输出对应的信息 logger.exception 如果只是使用logger.info等方式不会记录过多的异常信息但是使用logger.exception能够将详细的异常信息写入日志中去其能将错误的类型出错的位置进行记录有助于项目调试
try:a 3 / 0
except Exception as e:first_logger.exception(e) 上述样例的整体代码
import logging
import sysfirst_logger logging.getLogger(nameFirstLogger)
second_logger logging.getLogger(nameSecondLogger)
second_logger.setLevel(logging.DEBUG)
# print(ffirst_logger:{first_logger})
# print(fsecond_logger:{second_logger})stream_handler logging.StreamHandler(streamsys.stdout)
file_handler logging.FileHandler(filenamefile_log,modea,encodingutf-8)formatter logging.Formatter(%(asctime)s - %(levelname)s - %(message)s)
first_logger.addHandler(stream_handler)
stream_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
first_logger.warning(warning text,)third_logger logging.getLogger(aabb.ccthird_logger)
third_logger.warning(123)flt logging.Filter(aabb.cc)
third_logger.addFilter(flt)
second_logger.addHandler(stream_handler)
second_logger.addFilter(flt)
second_logger.error(error text)try:a 3 / 0
except Exception as e:first_logger.exception(e) 日志的配置文件及其模板 可以参考我另外一篇博客那里有详细介绍 Python logging 日志配置文件模板_gongzairen的博客-CSDN博客