Python日志模块logging基本用法

目录

logging模块

TimedRotatingFileHandler模块 


logging模块

当开发一个大型Python应用程序时,可能需要记录不同级别的日志以及调试信息,以便在遇到问题时快速诊断问题。Python内置的logging模块可以帮助你完成这些任务。

Python的logging模块支持多个日志处理程序(handler),每个处理程序可以定义自己的日志级别。例如,你可以将INFO级别的日志写入磁盘文件,将WARNING级别的日志输出到控制台,将ERROR级别的日志发送到Email。这种灵活的配置方式可以使你根据自己的需要,将日志信息传递给不同的处理程序。

logging模块还支持日志的格式化输出。你可以指定日期格式、日志级别、日志信息等内容。通过使用不同的格式化选项,可以轻松地自定义日志信息的输出格式。

下面是logging模块中的几个重要概念:

  • Logger:Logger是Python logging模块的主要接口,你可以通过Logger来创建不同的日志记录器。你可以为不同的模块或代码块创建不同的Logger来实现日志的分级和分模块管理。

  • Handler:Handler是一个输出日志的处理器,可以将日志写入文件、控制台或网络。每个Logger可以有多个Handler,你可以根据不同的需求配置不同的Handler。

  • Formatter:Formatter定义了日志输出的格式,可以定义日期格式、日志级别、日志信息等内容。

  • Filter:Filter可以用来控制哪些日志记录被处理。你可以根据不同的过滤条件来实现日志的过滤。

logging模块的使用流程一般是这样的:

  1. 创建Logger对象,为它设置日志级别和日志格式;
  2. 创建Handler对象,为它设置日志级别和日志格式;
  3. 将Handler对象添加到Logger对象中;
  4. 使用Logger对象输出日志。

下面是一个简单的例子,演示了如何使用logging模块输出日志到控制台和文件:

import logging

# 创建Logger对象
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)

# 创建FileHandler对象
file_handler = logging.FileHandler('mylog.log')
file_handler.setLevel(logging.DEBUG)

# 创建StreamHandler对象
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)

# 创建Formatter对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)

# 添加Handler对象到Logger对象中
logger.addHandler(file_handler)
logger.addHandler(stream_handler)

# 输出日志
logger.debug('Debug message')
logger.info('Info message')
logger.warning('Warning message')
logger.error('Error message')
logger.critical('Critical message')

在这个例子中,首先创建了Logger对象,并设置了日志级别为DEBUG。然后创建了FileHandler和StreamHandler对象,分别用于输出日志到文件和控制台。接着创建了Formatter对象,用于定义日志输出的格式。最后将FileHandler和StreamHandler添加到Logger对象中,并通过Logger对象输出了不同级别的日志信息。

通过使用logging模块,你可以实现非常灵活的日志记录和管理。你可以将日志输出到不同的地方,实现日志的分级和分模块管理。如果你正在开发一个大型的Python应用程序,logging模块可以帮助你更好地理解应用程序的运行状态,并帮助你快速定位和解决问题。

TimedRotatingFileHandler模块 

TimedRotatingFileHandler是Python中logging模块提供的一个Handler,它的作用是根据一定的时间间隔来切分日志文件。它会在一定的时间间隔后自动将日志内容写入新的日志文件,以便更好地管理日志文件大小和数量。

TimedRotatingFileHandler构造函数接收以下参数:

  • filename:日志文件的名称,包括路径。如果文件不存在,将会自动创建。
  • when:用于指定切分日志的时间间隔,取值为:S、M、H、D、W0-W6和midnight。其中S、M、H分别表示秒、分钟和小时,D表示天,W0-W6表示星期天到星期六,midnight表示每天的凌晨。
  • interval:切分日志的时间间隔,取值为整数,单位是when指定的时间单位。例如:当when为'D'时,interval为1表示每天切分日志,interval为7表示每7天切分日志。
  • backupCount:保留的日志文件数量,如果超过这个数量,旧的日志文件将会被删除。

下面是一个使用TimedRotatingFileHandler的例子:

import logging.handlers

# 创建TimedRotatingFileHandler对象
handler = logging.handlers.TimedRotatingFileHandler(
    filename='mylog.log',
    when='D',
    interval=1,
    backupCount=7,
    encoding='utf-8'
)

# 创建Formatter对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# 创建Logger对象
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)

# 输出日志
logger.debug('Debug message')
logger.info('Info message')
logger.warning('Warning message')
logger.error('Error message')
logger.critical('Critical message')

在这个例子中,创建了一个TimedRotatingFileHandler对象,用于将日志输出到文件。使用when指定了按天切分日志文件,使用interval指定了每天切分日志文件,使用backupCount指定了保留7个日志文件。每次运行这个程序,日志输出将会被追加到mylog.log文件中,如果文件大小超过了指定的大小,将会自动创建一个新的日志文件,最多保留7个日志文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员陈子青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值