美文网首页
Python的日志模块2

Python的日志模块2

作者: 爱痴鱼 | 来源:发表于2017-10-25 14:13 被阅读0次

基本使用方法

调用函数

  • Logger 记录器,直接提供日志接口。
  • Handler 处理器,将(记录器产生的)日志记录发送至合适的目的地。
  • Formatter 格式化器,指明了最终输出中日志记录的布局。
  • Filter 过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录。

Logger 记录器

创建方法:

 logger = logging.getLogger(logger_name)

创建Logger实例后,可以使用以下方法进行日志级别设置,增加处理器Handler。

logger.setLevel(logging.ERROR) # 设置日志级别为ERROR,即只有日志级别大于等于ERROR的日志才会输出
logger.addHandler(handler_name) # 为Logger实例增加一个处理器
logger.removeHandler(handler_name) # 为Logger实例删除一个处理器

Handler 处理器

Handler处理器类型有很多种,比较常用的有三个,StreamHandlerFileHandlerNullHandler,详情可以访问Python logging.handlers
创建方法:

sh = logging.StreamHandler(stream=None) #创建StreamHandler,输出到控制台
fh = logging.FileHandler(filename, mode='a', encoding=None, delay=False)#创建FileHandler,输出到文件

Formatter 格式化器

Formatter指定的是每一条日志记录的抬头信息,也就是你可以指定日志记录的时间格式、进程号、文件名、函数名等信息。可以用这个方法来创建一个Formatter对象:

logging.Formatter.__init__( fmt=None, datefmt=None)

fmt参数指定进程号、文件名、函数名等信息是否出现以及格式, datefmt为日期时间格式,默认的日期格式精确到微秒,例如‘2003-07-08 16:49:45,896’。fmt中可以指定多个字段,每个字段的格式为“%(<dictionary key>)s”, 例如你想打印时间、日志级别、日志信息可以用下面的format:

'%(asctime)s - %(levelname)s - %(message)s'

在记录爬虫系统日志的时候需要定义记录日志的级别,级别越高表示打出来的日志越详细。我们可以用一个字典来设置不同级别对应的不同日志信息:

#用字典保存日志级别
format_dict = {
   1 : logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
   2 : logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
   3 : logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
   4 : logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
   5 : logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
}

Filter 过滤器

Handlers和Loggers可以使用Filters来完成比级别更复杂的过滤。Filter基类只允许特定Logger层次以下的事件。例如用‘A.B’初始化的Filter允许Logger ‘A.B’, ‘A.B.C’, ‘A.B.C.D’, ‘A.B.D’等记录的事件,logger‘A.BB’, ‘B.A.B’ 等就不行。 如果用空字符串来初始化,所有的事件都接受。

filter = logging.Filter(name='')

将本文开始的代码封装在一个类中

#开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件   
class Logger():
    def __init__(self, logname, loglevel, logger):
        '''
           指定保存日志的文件路径,日志级别,以及调用文件
           将日志存入到指定的文件中
        '''
        
        # 创建一个logger
        self.logger = logging.getLogger(logger)
        self.logger.setLevel(logging.DEBUG)
        
        # 创建一个handler,用于写入日志文件
        fh = logging.FileHandler(logname)
        fh.setLevel(logging.DEBUG)
        
        # 再创建一个handler,用于输出到控制台
        ch = logging.StreamHandler()
        ch.setLevel(logging.DEBUG)
        
        # 定义handler的输出格式
        #formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        formatter = format_dict[int(loglevel)]
        fh.setFormatter(formatter)
        ch.setFormatter(formatter)
        
        # 给logger添加handler
        self.logger.addHandler(fh)
        self.logger.addHandler(ch)
        
    
    def getlog(self):
        return self.logger

再通过以下方式调用,便是一个简单的日志系统了

logger = Logger(logname='log.txt', loglevel=1, logger="fox").getlog()

相关文章

  • Python 中的 logging 模块 学习

    参考资料: Python中的logging模块 python 的日志logging模块学习 python logg...

  • logging模块

    简介 logging模块是python日志管理模块 使用 日志级别: CRITICAL > ERROR > WAR...

  • logging模块

    (一)什么是logging模块? logging是Python内置的日志模块,用于生成程序的日志 (二...

  • Django中的日志系统章

    Python日志系统 Django使用logging模块记录日志。Python的日志系统分为4块。分别是:logg...

  • python的日志模块logging

    这里介绍python的logging日志模块 1. 单纯显示日志在屏幕 或者简单一些 2. 日志写入指定文件 或者...

  • Python日志处理logging

    参考: Python之日志处理(logging模块)

  • Python的日志模块2

    基本使用方法 调用函数 Logger 记录器,直接提供日志接口。Handler 处理器,将(记录器产生的)日志记录...

  • 1-logging模块

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志...

  • Python 标准库模块 - logging

    logging 模块是 Python 内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、...

  • Python日志处理模块loggin

        logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径...

网友评论

      本文标题:Python的日志模块2

      本文链接:https://www.haomeiwen.com/subject/bseqpxtx.html