Python中使用logging模块记录日志

在部署工程化的项目时,我们常需要记录日志。logging模块提供了强大的日志记录功能,可用于记录程序报错的信息、自定义的运行记录,还可以在出现指定错误时发邮件报警。

经过简单试用,现总结一下基础用法,后续深入使用后,会继续完善此博客。

1、logging句柄

logging模块中,提供了多种句柄,如:

  • StreamHandler
  • FileHandler
  • BaseRotatingHandler
  • RotatingFileHandler
  • TimedRotatingFileHandler
  • WatchedFileHandler
  • SocketHandler
  • DatagramHandler
  • SysLogHandler
  • SMTPHandler
  • NTEventLogHandler
  • HTTPHandler
  • BufferingHandler
  • MemoryHandler
  • QueueHandler

其中前两个:StreamHandler、FileHandler,属于logging模块下的两个常用句柄,后面的是在logging.handlers里面定义的对应不同需求的句柄。

现在对StreamHandlerFileHandler以及logging.handler里面的SMTPHandler分别进行介绍。

  • StreamHandler:将日志信息打印在控制台;
  • FileHandler:将日志信息写入文件;
  • SMTPHandler:将所需日志信息通过邮件的形式发送到指定邮箱。

各个handler的定义如下所示:

# 控制台handler
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
    
# 文件handler
filename = 'logger.log'
fh = logging.FileHandler(filename)
fh.setLevel(logging.DEBUG)

# 邮件handler,使用该handler可以将需要的信息发送到指定邮箱
# 需指定:邮箱服务器、发送人、接收人(多个的话用[]括住)、邮件主题、凭证(tuple格式)
sh = logging.handlers.SMTPHandler("smtp.qq.com",  'XXXXXX@qq.com', 'XXXXXX@163.com',
    "logging from my app", 
    credentials=('邮箱用户名,即@之前的部分', 'SMTP密码'), 
    secure=())
sh.setLevel(logging.DEBUG)

其中,邮件handler需要指定几个指标,可根据自身需求进行设置,其需要的邮件协议为SMTP,可在相应邮箱设置中开通,并得到自己的密码,通过与邮箱用户名(@之前的部分)进行组合,形成credentials参数。

2、logging日志输出级别

共分为五种,其名称及设定的值如下;

  • CRITICAL = 50
  • ERROR = 40
  • WARNING = 30
  • INFO = 20
  • DEBUG = 10
  • NOTSET = 0

其中,最后一种为默认情况,因为DEBUG为最低级别,所以如果不主动设置,则默认为DEBUG及其以上,也即所有级别。

3、logging模块使用一般步骤

首先,初始化一个logging实例;

其次,构造handler并设置其相应输出级别以及各种配置参数;

然后,将配置好的handler加载到logging实例中;

最后,将需要记录的日志信息输出到相应handler所对应的出口。

现给出一个完整的使用示例:

import logging

logger = logging.getLogger()

try:
    logger.handlers.clear()
except:
    print('something wrong~')

# 控制台handler
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
    
# 文件handler
filename = 'logger.log'
fh = logging.FileHandler(filename)
fh.setLevel(logging.DEBUG)

# 邮件handler,使用该handler可以将需要的信息发送到指定邮箱
# 需指定:邮箱服务器、发送人、接收人(多个的话用[]括住)、邮件主题、凭证(tuple格式)
sh = logging.handlers.SMTPHandler("smtp.qq.com",  'XXXXXX@qq.com', 'XXXXXX@163.com',
    "logging from my app", 
    credentials=('邮箱用户名,即@之前的部分', 'SMTP密码'), 
    secure=())
sh.setLevel(logging.DEBUG)

# 在这里选择所需handler
handler_dict = {'ch':ch,'fh':fh,'sh':sh}
handler = handler_dict['ch']

# 设置信息格式
formatter = logging.Formatter('\n%(asctime)s %(name)s- %(levelname)s - %(message)s') #定义日志输出格式
handler.setFormatter(formatter)

# 载入handler
logger.addHandler(handler)

# 五种日志记录方式,文件写入只记录warning、error、critical
logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')

使用上面的测试脚本,可先选定三者之一的handler,然后测试其输出结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AICVHub

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

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

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

打赏作者

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

抵扣说明:

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

余额充值