python的logging两种高级用法

一、 基础使用

1.1 logging使用场景

日志是什么?这个不用多解释。百分之九十的程序都需要提供日志功能。Python内置的logging模块,为我们提供了现成的高效好用的日志解决方案。但是,不是所有的场景都需要使用logging模块,下面是Python官方推荐的使用方法:

任务场景 最佳工具
普通情况下,在控制台显示输出 print()
报告正常程序操作过程中发生的事件 logging.info()(或者更详细的logging.debug())
发出有关特定事件的警告 warnings.warn()或者logging.warning()
报告错误 弹出异常
在不引发异常的情况下报告错误 logging.error()logging.exception()或者logging.critical()

1.2 简单范例

在什么都不配置和设定的情况下,logging会简单地将日志打印在显示器上,如下例所示:

import logging
logging.warning('Watch out!')  # 消息会被打印到控制台上
logging.info('I told you so')  # 这行不会被打印,因为级别低于默认级别

如果,将上面的代码放在一个脚本里并运行,结果是:

WARNING:root:Watch out!

二、python的logging两种高级用法

如果只是简单地使用logging,那么使用上面介绍的方法就可以了,如果要深度定制logging,那么就需要对它有更深入的了解。下面的内容才是基本的logging模块的使用方法。

logging模块采用了模块化设计,主要包含四种组件:

Loggers:记录器,提供应用程序代码能直接使用的接口;

Handlers:处理器,将记录器产生的日志发送至目的地;

Filters:过滤器,提供更好的粒度控制,决定哪些日志会被输出;

Formatters:格式化器,设置日志内容的组成结构和消息字段。

下面是两种流程:屏幕和文件进行日志输出

1、屏幕进行日志输出

标准输出stdout(如显示器)分发器。

创建方法: sh = logging.StreamHandler(stream=None)

#simple_logging_module.py
# -*- coding: utf-8 -*-
import logging

# 创建logger记录器
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)

# 创建一个控制台处理器,并将日志级别设置为debug。
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# 创建formatter格式化器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 将formatter添加到ch处理器
ch.setFormatter(formatter)

# 将ch添加到logger
logger.addHandler(ch)

# 然后就可以开始使用了!
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

输出结果:打印在屏幕

C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/owen_logging.py
2019-11-14 10:11:59,673 - simple_example - DEBUG - debug message
2019-11-14 10:11:59,673 - simple_example - INFO - info message
2019-11-14 10:11:59,673 - simple_example - WARNING - warn message
2019-11-14 10:11:59,673 - simple_example - ERROR - error message
2019-11-14 10:11:59,673 - simple_example - CRITICAL - critical message

2、文件进行日志输出

将日志保存到磁盘文件的处理器。

创建方法: fh = logging.FileHandler(filename, mode='a', encoding=None, delay=False)

#simple_logging_module.py
# -*- coding: utf-8 -*-
import logging

# 创建logger记录器
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)

# 创建一个文本处理器,并将日志级别设置为debug。
fh = logging.FileHandler('test.log')
fh.setLevel(logging.DEBUG)

# 创建formatter格式化器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 将formatter添加到ch处理器
fh.setFormatter(formatter)

# 将fh添加到logger
logger.addHandler(fh)

# 然后就可以开始使用了!
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

输出结果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章