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两种遍历字典(dict)的方法比较
May 29 Python
进一步了解Python中的XML 工具
Apr 13 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
Jun 27 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
pygame游戏之旅 创建游戏窗口界面
Nov 20 Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
python实现对图片进行旋转,放缩,裁剪的功能
Aug 07 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
python代数式括号有效性检验示例代码
Oct 04 Python
python批量生成条形码的示例
Oct 10 Python
python numpy中multiply与*及matul 的区别说明
May 26 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 heredoc和phpwind的模板技术使用方法小结
2008/03/28 PHP
PHP strtok()函数的优点分析
2010/03/02 PHP
PHP自定义函数收代码
2010/08/01 PHP
thinkphp控制器调度使用示例
2014/02/24 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
utf8的编码算法 转载
2006/12/27 Javascript
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
js setTimeout()函数介绍及应用以倒计时为例
2013/12/12 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
python数据结构树和二叉树简介
2014/04/29 Python
python里大整数相乘相关技巧指南
2014/09/12 Python
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
Python程序慢的重要原因
2020/09/04 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
自荐信怎么写好
2013/11/11 职场文书
应届毕业生求职信
2013/11/30 职场文书
手术室护士长竞聘书
2014/03/31 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
2014法制宣传日活动总结
2014/07/09 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
初中优秀学生评语
2014/12/29 职场文书
薪资证明范本
2015/06/19 职场文书
教师病假条范文
2015/08/17 职场文书