Python的logging模块基本用法


Posted in Python onDecember 24, 2020

在服务器部署时,往往都是在后台运行。当程序发生特定的错误时,我希望能够在日志中查询。因此这里熟悉以下 logging 模块的用法。

logging 模块定义了报告错误和状态信息的标准 API。

logging 的组件

日志系统有 4 个相互交互的组件。我们需要使用 Logger 实例来向日志添加信息。触发日志会创建一个 LogRecord,用于内存中存储信息。Logger 可能有很多 Handler 对象,用于接收和处理日志记录。Handler 使用 Formatter 来输出日志记录。

向文件输入日志

大多数应用都是把日志输入到文件。使用 basicConfig() 函数可以设置默认的 handler,让日志输入到文件。

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

LOG_FILENAME = 'log.txt'
logging.basicConfig(
  filename=LOG_FILENAME,
  level=logging.DEBUG,
)

logging.debug('hello logging!')

with open(LOG_FILENAME, 'rt') as f:
  body = f.read()

print('FILE: ')
print(body)

运行脚本后输出如下:

FILE:
DEBUG:root:hello logging!

日志文件的循环

要让每次程序运行时,生成一个新的文件,需要向 basicConfig() 传一个值为 w 的 filemode 参数。还有一个更方便的方法,就是使用 RotatingFileHandler,可以同时自动创建文件和保存旧文件。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import glob
import logging.handlers

LOG_FILENAME = 'log.txt'

my_logger = logging.getLogger('SpecificLogger')
my_logger.setLevel(logging.DEBUG)

# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
  LOG_FILENAME,
  maxBytes=20,
  backupCount=5,
)
my_logger.addHandler(handler)

# Log some messages
for i in range(20):
  my_logger.debug(f'i = {i}')

# See what files are created
log_files = glob.glob(f'{LOG_FILENAME}*')
for filename in sorted(log_files):
  print(filename)

运行脚本后输出如下:

log.txt
log.txt.1
log.txt.2
log.txt.3
log.txt.4
log.txt.5

可以返现,log.txt 存储的都是最新的内容,logging 会自动地对这些文件进行重命名。 

信息显示的级别

logging 有不同的日志级别。

级别(level) 值(value)
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
UNSET 0

日志可以只在某一级别之上的情况才会触发。

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

level = int(sys.argv[1])
logging.basicConfig(
  level=level
)

logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
$ python logging_level.py 10
DEBUG:root:debug message
INFO:root:info message
WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message
$ python logging_level 40
ERROR:root:error message
CRITICAL:root:critical message

命名 logging 实例

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

logging.basicConfig(
  level=logging.WARNING
)

logger1 = logging.getLogger('package1.module1')
logger2 = logging.getLogger('package2.module2')

logger1.warning('hello 1')
logger2.warning('hello 2')

运行脚本后输出:

WARNING:package1.module1:hello 1
WARNING:package2.module2:hello 2

以上就是Python的logging模块基本用法的详细内容,更多关于Python logging模块的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python清除指定目录内所有文件中script的方法
Jun 30 Python
python 垃圾收集机制的实例详解
Aug 20 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
python MySQLdb使用教程详解
Mar 20 Python
Python实现将Excel转换成xml的方法示例
Aug 25 Python
python 用opencv调用训练好的模型进行识别的方法
Dec 07 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
python超时重新请求解决方案
Oct 21 Python
Python3操作YAML文件格式方法解析
Apr 10 Python
详解python中groupby函数通俗易懂
May 14 Python
Python如何进行时间处理
Aug 06 Python
python 通过exifread读取照片信息
Dec 24 #Python
python 如何上传包到pypi
Dec 24 #Python
python 基于PYMYSQL使用MYSQL数据库
Dec 24 #Python
python xlsxwriter模块的使用
Dec 24 #Python
想学画画?python满足你!
Dec 24 #Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 #Python
用python获取txt文件中关键字的数量
Dec 24 #Python
You might like
php stripslashes和addslashes的区别
2014/02/03 PHP
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
2010/09/28 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
python实现定时播放mp3
2015/03/29 Python
python通过zabbix api获取主机
2018/09/17 Python
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
中式婚礼主持词
2014/03/13 职场文书
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
鸟的天堂导游词
2015/01/31 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android
python turtle绘图
2022/05/04 Python