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中使用PyQt把网页转换成PDF操作代码实例
Apr 23 Python
Python简单实现子网掩码转换的方法
Apr 13 Python
Python中的os.path路径模块中的操作方法总结
Jul 07 Python
Django 用户认证组件使用详解
Jul 23 Python
python 调试冷知识(小结)
Nov 11 Python
python tkinter之 复选、文本、下拉的实现
Mar 04 Python
Python利用for循环打印星号三角形的案例
Apr 12 Python
python中的错误如何查看
Jul 08 Python
python 如何利用argparse解析命令行参数
Sep 11 Python
如何通过安装HomeBrew来安装Python3
Dec 23 Python
Python如何实现感知器的逻辑电路
Dec 25 Python
python实现计算图形面积
Feb 22 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设计模式 Visitor 访问者模式
2011/06/28 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
php防止网站被刷新的方法汇总
2014/12/01 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
2015/07/01 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
select组合框option的捕捉实例代码
2008/09/30 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
pytorch实现用Resnet提取特征并保存为txt文件的方法
2019/08/20 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
SQL语言面试题
2013/08/27 面试题
实习教师自我鉴定
2013/12/09 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
入股合作协议书
2014/10/12 职场文书
试用期自我评价范文
2015/03/10 职场文书
求职自我推荐信
2015/03/24 职场文书
办公室禁烟通知
2015/04/23 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
贷款工作证明模板
2015/06/12 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
大学生暑假实习总结
2015/07/13 职场文书
素质拓展训练感想
2015/08/07 职场文书
2016新年问候语大全
2015/11/11 职场文书
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python