python-- logging 模块

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: python-- logging 模块

前戏


import logging
logging.debug('debug message')  # 调试模式
logging.info('info message')  # 基础信息
logging.warning('warning message')  # 警告
logging.error('error message')  # 错误
logging.critical('critical message')  # 严重错误

结果:

WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message

打印出了warning及以上的信息,python解释器默认的


设置日志级别


import logging
logging.basicConfig(level=logging.DEBUG)  # 设置输出的日志级别
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')

结果:

DEBUG:root:debug message
INFO:root:info message
WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message


将日志写到文件


import logging
logging.basicConfig(filename='exa.log', level=logging.INFO)
logging.debug('this message should go to the log file')
logging.info('so should this')
logging.warning('And this,too')

这句中的level=loggin.INFO意思是,把日志纪录级别设置为INFO,也就是说,只有比日志是INFO或比INFO级别更高的日志才会被纪录到文件里,在这个例子, 第一条日志是不会被纪录的,如果希望纪录debug的日志,那把日志级别改成DEBUG就行了。


给日志加上时间


import logging
logging.basicConfig(filename='exa.log', level=logging.INFO, format='%(asctime)s %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S %p')
logging.debug('this message should go to the log file')
logging.info('so should this')
logging.warning('And this,too')

结果

2020-09-20 22:08:26 PM so should this
2020-09-20 22:08:26 PM And this,too


把日志同时打印在屏幕上和写在日志里


import logging
logger = logging.getLogger('TEST-LOG')
logger.setLevel(logging.INFO)  # 设置一个全局的日志级别,局部的比全局的级别低时,以全局的为准
ch = logging.StreamHandler()  # 往屏幕上输出日志
ch.setLevel(logging.DEBUG)  # 屏幕上的日志级别设置为debug
fh = logging.FileHandler("access.log")
# 往文件里输出日志
fh.setLevel(logging.WARNING)  # 文件里的日志级别     为warning
# 定义日志格式,%(name)s是上面定义的这个值
# %(lineno)d 哪一行打印的日志
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_formatter = logging.Formatter('%(asctime)s  -%(lineno)d- %(levelname)s - %(message)s')
# 添加formatter到屏幕和文件里
ch.setFormatter(formatter)
fh.setFormatter(file_formatter)
# 添加屏幕和文件日志到logger里
logger.addHandler(ch)
logger.addHandler(fh)
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')

结果:

屏幕上
2018-05-19 13:57:22,611 - TEST-LOG - INFO - info message
2018-05-19 13:57:22,611 - TEST-LOG - WARNING - warn message
2018-05-19 13:57:22,611 - TEST-LOG - ERROR - error message
2018-05-19 13:57:22,612 - TEST-LOG - CRITICAL - critical message
文件access.log里
2018-05-19 14:03:54,785  -29- WARNING - warn message
2018-05-19 14:03:54,785  -30- ERROR - error message
2018-05-19 14:03:54,785  -31- CRITICAL - critical message

import logging
# create logger
logger = logging.getLogger('TEST-LOG')
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create file handler and set level to warning
fh = logging.FileHandler("access.log")
fh.setLevel(logging.WARNING)
# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# add formatter to ch and fh
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# add ch and fh to logger
logger.addHandler(ch)
logger.addHandler(fh)
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')

结果:

2020-09-20 22:10:41,825 - TEST-LOG - DEBUG - debug message
2020-09-20 22:10:41,825 - TEST-LOG - INFO - info message
2020-09-20 22:10:41,825 - TEST-LOG - WARNING - warn message
2020-09-20 22:10:41,825 - TEST-LOG - ERROR - error message
2020-09-20 22:10:41,825 - TEST-LOG - CRITICAL - critical message

创建一个logger对象

创建一个文件管理操作符

创建一个屏幕管理操作符

创建一个日志输出的格式

文件管理操作符 绑定一个 格式

屏幕管理操作符 绑定一个 格式

logger对象 绑定 文件管理操作符

logger对象 绑定 屏幕管理操作符

import logging
# 创建一个logger对象
logger = logging.getLogger()
# 创建一个文件管理操作符
fh = logging.FileHandler('logger.log', encoding='utf-8')
# 创建一个屏幕管理操作符
sh = logging.StreamHandler()
# 创建一个日志输出的格式
format1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 文件管理操作符 绑定一个 格式
fh.setFormatter(format1)
# 屏幕管理操作符 绑定一个 格式
sh.setFormatter(format1)
logger.setLevel(logging.DEBUG)
# logger对象 绑定 文件管理操作符
# logger.addHandler(fh)
# logger对象 绑定 屏幕管理操作符
logger.addHandler(sh)
logger.debug('debug message')  # 调试模式
logger.info('我的信息')  # 基础信息
logger.warning('warning message')  # 警告
logger.error('error message')  # 错误
logger.critical('critical message')  # 严重错误

结果:

2020-09-20 22:11:36,115 - root - DEBUG - debug message
2020-09-20 22:11:36,115 - root - INFO - 我的信息
2020-09-20 22:11:36,115 - root - WARNING - warning message
2020-09-20 22:11:36,115 - root - ERROR - error message
2020-09-20 22:11:36,115 - root - CRITICAL - critical message

import logging
from logging import handlers
logger = logging.getLogger(__name__)
log_file = "timelog.log"
fh = handlers.TimedRotatingFileHandler(filename=log_file, when="S", interval=5, backupCount=3)
formatter = logging.Formatter('%(asctime)s %(module)s:%(lineno)d %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
logger.warning("test1")
logger.warning("test12")
logger.warning("test13")
logger.warning("test14")

结果:

2020-09-20 22:13:10,481 tests:17 test1
2020-09-20 22:13:10,483 tests:18 test12
2020-09-20 22:13:10,483 tests:19 test13
2020-09-20 22:13:10,483 tests:20 test14

相关文章
|
5天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
19 5
|
15天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
18天前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
62 5
|
22天前
|
Python
SciPy 教程 之 SciPy 模块列表 6
SciPy教程之常量模块介绍:涵盖公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率及力学单位。示例展示了角度单位转换为弧度的几个常用常量。
18 7
|
22天前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
17 6
|
19天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
17 1
|
20天前
|
XML 前端开发 数据格式
超级详细的python中bs4模块详解
Beautiful Soup 是一个用于从网页中抓取数据的 Python 库,提供了简单易用的函数来处理导航、搜索和修改分析树。支持多种解析器,如 Python 标准库中的 HTML 解析器和更强大的 lxml 解析器。通过简单的代码即可实现复杂的数据抓取任务。本文介绍了 Beautiful Soup 的安装、基本使用、对象类型、文档树遍历和搜索方法,以及 CSS 选择器的使用。
51 1
|
21天前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
13 1
|
21天前
|
Python
SciPy 教程 之 SciPy 模块列表 8
SciPy教程之常量模块单位类型介绍。该模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例展示了部分长度单位的转换值,例如英寸、英尺、海里等。
14 1
|
23天前
|
知识图谱 Python
SciPy 教程 之 SciPy 模块列表 5
本教程介绍SciPy常量模块中的单位类型,涵盖公制、质量、时间、长度等单位。示例代码展示了如何使用`scipy.constants`模块获取不同质量单位的千克值,如公吨、磅、盎司、原子质量单位等。
15 1