Python 日志输出 logging

Python Logging Module 日志模块


logging 日志流处理

Official tutorial

logging 模块日志模块组件

logging 模块的日志模块总共包含了四个组件:

  • 日志器 Loggers : 提供应用程序可以一直使用的接口,并且可以设置产生的日志等级等,日志产生之后,将会交给已注册的处理器进行处理

  • 处理器 Handlers :对 Logger 产生的日志进行处理 —— 通过相应的函数进行处理方式的设置,例如输出格式,以及输出的日志等级等

  • 过滤器 Filters :对将要输出的日志进行更好过滤以确定最终要输出的日志结果

  • 格式化器 Formatter :确定日志最终的输出格式

事实上,在一个应用程序的整个过程中,通过 Logger 类的实例进行日志处理和输出,这些实例通过一个命名空间的层级结构组织起来,每个命名空间和子空间之间通过 '.' 来分隔,例如:scan.textscan 这个 Logger 的子空间中,日志名根据需要可以任意定义。

显然,这种命名方式马上可以联想到 Python 模块的命名方式,所以官方文档中为我们提供的一种较好的命名方法就是通过模块的 __name__ 属性来进行命名,既可以实现不同层级的模块之间的命名空间组织,又使得每个日志输出都和对应的模块关联起来,方便进行日志查找和管理:

logger = logging.getLogger(__name__)
logging 日志流处理流程

官网的日志处理流程:
在这里插入图片描述

所以,日志流处理的四个组件的过程如下:

日志器 Logger
过滤器 Filter
处理器 Handler
格式化器 Formatter

通过 getLogger 函数来得到这个模块的日志器对象,然后通过 setLevel 和 addHandler 方法可以为这个日志器对象设置日志的输出等级以及日志输出的处理器:

# set log level
logger.setLevel(logging.DEBUG)

# create handler
trf_handler = logging.TimedRotatingFileHandler()
logger.addHandler(trf_handler)

创建的日志器还可以设置相应的格式化器,来确定最终输出到文件的日志的格式:

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# add formatter to timed rotating file handler
trf_handler.setFormatter(formatter)

通过直接调用不同等级的日志输出函数,就可以得到对应格式和等级的日志输出:

logger.debug('This is debug')
logger.info('This is info')
logger.warn('This is warn')
logger.error('This is error')
logger.critical('This is critical')
Loggers 日志器
Handlers 处理器

常用的日志处理器:

  • FileHandler
  • TimedRotatingFileHandler
Filters 过滤器
Formatter 格式化器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 中,可以使用标准库中的 logging 模块来实现日志输出到多个文件。下面是一个简单的示例代码,演示了如何将日志同时输出到两个不同的文件中: ```python import logging # 创建 logger 对象 logger = logging.getLogger(__name__) # 创建文件处理器,将日志输出到 file1.log 文件中 file_handler_1 = logging.FileHandler('file1.log') file_handler_1.setLevel(logging.INFO) # 创建文件处理器,将日志输出到 file2.log 文件中 file_handler_2 = logging.FileHandler('file2.log') file_handler_2.setLevel(logging.WARNING) # 设置日志格式 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') file_handler_1.setFormatter(formatter) file_handler_2.setFormatter(formatter) # 将处理器添加到 logger 对象中 logger.addHandler(file_handler_1) logger.addHandler(file_handler_2) # 输出日志信息 logger.debug('debug message') logger.info('info message') logger.warning('warning message') logger.error('error message') logger.critical('critical message') ``` 在上面的代码中,我们首先创建了一个 logger 对象,并为其设置了两个不同的文件处理器。然后,我们设置了日志级别和日志格式,并将处理器添加到 logger 对象中。最后,我们通过 logger 对象输出了一些日志信息。 在运行上面的代码后,会在当前目录下生成两个日志文件:file1.log 和 file2.log。其中,file1.log 中包含了所有级别的日志信息,而 file2.log 中只包含了 WARNING、ERROR 和 CRITICAL 级别的日志信息。 如果需要输出到更多的日志文件,只需要创建更多的文件处理器,并将它们添加到 logger 对象中即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值