解决Logger没有info输出的问题
背景
最近在写爬虫的时候,打算使用logging来输出中间的一些过程,查看过程是否出现错误。写好一个logging类,用于记录。开始测试的好好地,后来进行了一些修改,导致没办法输出info信息。后面通过自己上网搜索,并测试调试找出了原因,这里记录一些
前提知识
首先需要了解logger 事件有五类
DEBUG 指定细粒度信息事件是最有用的应用程序调试
INFO 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息
WARNING 指定具有潜在危害的情况
ERROR 错误事件可能仍然允许应用程序继续运行
FATAL 指定非常严重的错误事件,这可能导致应用程序中止
大概了解logger的Handler,Formatter,Filter等
问题解决
出现没有info的原因大概有两种
第一种:设置了日志级别高于info,就不会输出info信息
第二种:就是我遇到的情况,我定义了多个logger,设置了不同的level,输出不同的信息
但疏忽了一点logger默认的事件级别是WARN
# -*- coding: utf-8 -*-
import logging
import datetime
import os
class WebLogger():
"""程序调试日志-文件和控制台输出"""
def __init__(self, name):
"""初始化属性"""
# 初始化日志器
self.logger =logging.getLogger(name)
self.logger.setLevel(logging.DEBUG)
# 初始化日志输出格式器
file_fmt='%(asctime)s,%(name)s[line:%(lineno)d],%(levelname)s,%(message)s'
console_fmt='%(name)s[line:%(lineno)d] - %(levelname)s: %(message)s'
file_formatter = logging.Formatter(file_fmt)
console_formatter=logging.Formatter(console_fmt)
#创建路径
file_path=os.path.join(os.getcwd(),'logs')
if not os.path.exists(file_path):
os.mkdir(file_path)
#初始化info文件处理器
file_name_info=str(datetime.date.today()) + " log_info.csv"
file_path_info=file_path+"\\"+file_name_info
file_handler_info=logging.FileHandler(file_path_info)
file_handler_info.setLevel(logging.INFO)
file_handler_info.setFormatter(file_formatter)
#初始化error文件处理器
file_name_error=str(datetime.date.today()) + " log_error.csv"
file_path_error=file_path+"\\"+file_name_error
file_handler_error=logging.FileHandler(file_path_error)
file_handler_error.setLevel(logging.ERROR)
file_handler_error.setFormatter(file_formatter)
#初始化日志输出流处理器
console_handler=logging.StreamHandler()
console_handler.setLevel(logging.INFO)
console_handler.setFormatter(console_formatter)
#添加日志处理器
self.logger.addHandler(file_handler_info)
self.logger.addHandler(file_handler_error)
self.logger.addHandler(console_handler)
def get_logger(self):
"""获得自定义的日志器"""
return self.logger
'''
DEBUG 指定细粒度信息事件是最有用的应用程序调试
INFO 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息
WARNING 指定具有潜在危害的情况
ERROR 错误事件可能仍然允许应用程序继续运行
FATAL 指定非常严重的错误事件,这可能导致应用程序中止
'''
测试代码
from WebLogger import WebLogger
mylog=WebLogger("test")
mylog.logger.debug("debug test")
mylog.logger.info("info test")
mylog.logger.warning("warn test")
mylog.logger.error("error test")
一开始我没有设置logger的级别,使用了默认的WARNING级别,后面设置Handler级别,设置的级别比默认的级别低,权限不够,因此输出不了info信息
读者可以自行尝试去掉和不去掉 self.logger.setLevel(logging.DEBUG)
一个结果中包含info信息,一个不包含
本篇简单记录一下,如果还有不明白的地方,可在下方评论区留言,我看到后会尽快回复,希望能和大家一起进步