python logging模块的实际应用

本文介绍了Python内置的logging模块,详细讲解了如何配置和使用logging进行日志记录,包括基本使用、日志写入文件、设置消息等级、捕获traceback以及在多模块中的应用。通过实例展示了如何设置不同级别的日志输出,以及如何将日志同时输出到屏幕和文件,并实现日志回滚。此外,还介绍了如何在异常发生时记录traceback信息。
摘要由CSDN通过智能技术生成

以一个实际使用例子开始:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import os
import sys

logger = logging.getLogger('log_a')   # 获取名称为log_a的日志器,相当于获取一个实例
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler = logging.FileHandler('aaa.log')
file_handler.setFormatter(formatter)
logger.setLevel(logging.DEBUG)

formatter_2 = logging.Formatter('%(pathname)s - %(name)s - %(levelname)s - %(message)s')
file_handler_2 = logging.FileHandler('bbb.log')
file_handler_2.setFormatter(formatter_2)
file_handler_2.setLevel(logging.ERROR)  # 如果不设置,默认为warn (这个是logging默认等级)。而不是继承logger.setLevel(),本来就不会继承,这个
                                        # hander 和 上面的logger没任何关系,直到这个hander被加到logger日志器中。就算被加到日志器中,还是默认等级

logger.addHandler(file_handler)       # 将hander加入日志器
logger.addHandler(file_handler_2)   # 所有的log信息都会同时输出到日志器的hander

logger.debug('0debug message')      
logger.info('0info message')
logger.warning('0warning message')
logger.error('0error message')
logger.critical('0critical message')

file_handler_2.setLevel(logging.WARN)

logger.debug('2debug message')
logger.info('2info message')
logger.warning('2warning message')
logger.error('2error message')
logger.critical('2critical message')

实际使用中可以加入异常处理:

# 这个在日志设置失败时,会把信息输出到控制台
 except OSError as e:
     print(str(e) + ". Using stdout instead.")
     stream_handler = logging.StreamHandler(stream=sys.stdout)
     stream_handler.setFormatter(formatter)
     logger.addHandler(stream_handler)

1 logging模块简介

logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比print,具备如下优点:

可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;
print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则可以由开发者决定将信息输出到什么地方,以及怎么输出;

2 logging模块使用

2.1 基本使用

配置logging基本的设置,然后在控制台输出日志,

import logging
logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

logger.info("Start print log")
logger.debug("Do something")
logger.warning("Something maybe fail.")
logger.info("Finish")

运行时,控制台输出,

2016-10-09 19:11:19,434 - __main__ - INFO - Start print log
201
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值