python logging模块之handlers的使用教程

一、handlers是什么?
  • logging模块中包含的类
  • 用来自定义日志对象的规则(比如:设置日志输出格式、等级等)
  • 常用3个子类:StreamHandler、FileHandler、TimedRotatingFileHandler
二、handlers基础应用

2.1 StreamHandler 控制台输出日志

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import logging

#创建一个logger日志对象
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)    #设置默认的日志级别

#创建日志格式对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#创建StreamHandler对象
sh = logging.StreamHandler()
#StreamHandler对象自定义日志级别
sh.setLevel(logging.DEBUG)
#StreamHandler对象自定义日志格式
sh.setFormatter(formatter)

logger.addHandler(sh)    #logger日志对象加载StreamHandler对象
#日志输出
logger.info('newdream')

上面代码执行后,会在控制台输出日志信息。

2.2 FileHandler 日志输出到文件

import logging

#创建一个logger日志对象
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)    #设置默认的日志级别

#创建日志格式对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#创建FileHandler对象
fh = logging.FileHandler('test.log')
#FileHandler对象自定义日志级别
fh.setLevel(logging.DEBUG)
#FileHandler对象自定义日志格式
fh.setFormatter(formatter)

logger.addHandler(fh)    #logger日志对象加载FileHandler对象
#日志输出
logger.info('newdream')

上面代码执行后,控制台不会输出日志信息,而会在当前文件夹新建一个test.log日志文件进行日志记录。

2.3 TimedRotatingFileHandler 日志分割

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import logging
from logging import handlers

#创建一个logger日志对象
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)    #设置默认的日志级别

#创建日志格式对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#创建TimedRotatingFileHandler对象
rh = handlers.TimedRotatingFileHandler("test.log", when='S', interval=1, backupCount=5)
#TimedRotatingFileHandler对象自定义日志级别
rh.setLevel(logging.DEBUG)
#TimedRotatingFileHandler对象自定义日志级别
rh.suffix = "%Y_%m_%d_%H_%M_%S.log"
#TimedRotatingFileHandler对象自定义日志格式
rh.setFormatter(formatter)

logger.addHandler(rh)    #logger日志对象加载TimedRotatingFileHandler对象
#日志输出
logger.info('newdream')

上面代码执行后,控制台不会输出日志信息,而会在当前文件夹新建一个 test_年_月_日_时_分_秒.log 日志文件进行日志记录。
在使用TimedRotatingFileHandler创建对象时,它的构造函数定义如下:

TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])
filename:是输出日志文件名的前缀,比如log/myapp.log
when:按什么日期格式切分,接收指定字符串参数,接收的值如下:
“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight

interval 是指等待多少个单位when的时间后,Logger会自动重建文件,这个文件的创建取决于filename+suffix,若这个文件跟之前的文件有重名,则会自动覆盖掉以前的文件,所以有些情况suffix要定义不能因为when而重复。
backupCount 是保留日志个数。默认的0是不会自动删除掉日志。若设为5,则在文件的创建过程中库会判断是否有超过这个5,若超过,则会从最先创建的开始删除。

三、小结

以上的日志实例为了让读者更清晰的操作和理解,分开代码单独实现

在 2.3 中 如果想实现看是否达到5个日志就删除的效果,可以把日志用循环输出,如下:

while True:
    logger.info('newdream')

三种handlers日志可以共同使用,都是独立的handler对象,但一般 FileHandler 和 TimedRotatingFileHandler 不会同时使用。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Pythonlogging模块可以帮助你记录应用程序运行时的信息,以便于进行跟踪和分析。使用logging模块,你可以记录任何级别的消息,从debug级别的调试信息,到警告级别的错误信息,再到严重级别的异常信息。你可以将消息记录到一个文件中,或者通过网络传输到另一台计算机,以便进行远程监控。 ### 回答2: Pythonlogging模块是一种用于记录日志的工具,可以帮助我们在开发过程中进行日志记录和调试。下面是一个简要的介绍和使用该模块的步骤。 首先,我们需要导入logging模块: ``` import logging ``` 接下来,我们通过配置logging模块来设置日志的输出方式和级别。可以使用如下代码来进行基本的配置: ``` logging.basicConfig(level=logging.DEBUG, format='%(asctime)s [%(levelname)s] %(message)s', handlers=[ logging.FileHandler("log.txt"), logging.StreamHandler() ]) ``` 上述代码中: - `level`参数指定了日志的级别,可以包括`DEBUG`、`INFO`、`WARNING`、`ERROR`和`CRITICAL`等级别。 - `format`参数定义了日志输出的格式,可以使用`%(asctime)s`来表示时间戳,`%(levelname)s`表示日志级别,`%(message)s`表示日志内容。 - `handlers`参数指定了日志的输出目标,可以包括文件和终端等。 设置完配置后,我们就可以使用相应级别的日志函数进行日志的记录。例如,使用`log.debug()`方法记录`DEBUG`级别的日志: ``` logging.debug("This is a debug message") ``` 使用`log.info()`、`log.warning()`、`log.error()`等方法可以分别记录不同级别的日志。 最后,在程序完成后,可以使用`log.shutdown()`方法来关闭日志记录。 以上就是Pythonlogging模块的基本使用方法。通过合理使用logging模块,我们可以更好地进行日志记录和调试,提高程序的可读性和可维护性。 ### 回答3: Python中的logging模块是用于记录日志的工具。使用该模块可以方便地将程序运行过程中的各种信息输出到控制台或者保存到文件中,以便后续的查阅和分析。 首先需要导入logging模块,并进行基本的配置。可以通过以下几个步骤来完成: 1. 导入logging模块: import logging 2. 配置日志: logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') 这里设置了日志的级别为DEBUG,即输出所有级别的日志信息;设置了日志的格式,包括时间、日志名称、日志级别和日志内容。 3. 输出日志: logging.debug('This is a debug message.') logging.info('This is an info message.') logging.warning('This is a warning message.') logging.error('This is an error message.') logging.critical('This is a critical message.') 可以使用不同级别的日志函数输出不同级别的日志信息。 另外,还可以对日志进行更加详细的配置,例如设置日志的保存路径、日志的保存方式(覆盖、追加等)、最大保存文件数量等。通过使用不同的handler来实现。 以下是一个例子: import logging logger = logging.getLogger('app') logger.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) ch.setFormatter(formatter) fh = logging.FileHandler('app.log') fh.setLevel(logging.WARNING) fh.setFormatter(formatter) logger.addHandler(ch) logger.addHandler(fh) logger.debug('This is a debug message.') logger.info('This is an info message.') logger.warning('This is a warning message.') logger.error('This is an error message.') logger.critical('This is a critical message.') 这样配置后,日志信息会同时输出到控制台和保存到文件app.log中。同时,控制台和文件中的日志信息级别由设置的handler决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值