解决Logger没有info输出的问题

解决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信息,一个不包含

本篇简单记录一下,如果还有不明白的地方,可在下方评论区留言,我看到后会尽快回复,希望能和大家一起进步

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Java Logger输出可能有以下几个原因: 1. Logger日志级别过高。Logger有多个日志级别,包括SEVERE、WARNING、INFO、CONFIG、FINE、FINER和FINEST,如果Logger日志级别设置得太高,可能会过滤掉一些低级别的日志信息。可以使用Logger.setLevel()方法来修改日志级别。 2. Logger的Handler没有设置。Logger可以有多个Handler来处理日志信息,如果没有设置HandlerLogger日志信息将不会输出到任何地方。可以使用Logger.addHandler()方法来添加Handler,例如添加ConsoleHandler可以输出日志信息到控制台。 3. Logger的Handler日志级别过高。与Logger类似,Handler也有多个日志级别,如果Handler日志级别设置得太高,可能会过滤掉一些低级别的日志信息。可以使用Handler.setLevel()方法来修改日志级别。 4. Logger的Filter过滤了日志信息。Logger可以设置Filter来过滤日志信息,如果Filter过滤掉了所有的日志信息,Logger日志信息将不会输出。可以使用Logger.setFilter()方法来设置Filter。 5. Logger日志信息没有正确的格式化。Logger默认使用SimpleFormatter来格式化日志信息,如果日志信息没有正确的格式化,可能会导致Logger日志信息无法输出。可以使用Logger.setFormatter()方法来设置Formatter。 需要注意的是,如果以上方法都没有解决问题,可能是由于其他原因导致Logger输出日志信息,需要进行更深入的排查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值