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生成IP段的方法
Jul 07 Python
HTML中使用python屏蔽一些基本功能的方法
Jul 07 Python
pycharm+django创建一个搜索网页实例代码
Jan 24 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
python基于http下载视频或音频
Jun 20 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
Oct 17 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
Mar 30 Python
Keras设置以及获取权重的实现
Jun 19 Python
Python如何将模块打包并发布
Aug 30 Python
如何一键升级Python所有包
Nov 05 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原理之Session Gc的一个小概率Notice
2011/04/12 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
PHP反射实际应用示例
2019/04/03 PHP
jquery ready函数源代码研究
2009/12/06 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
js实现点击每个li节点,都弹出其文本值及修改
2016/12/15 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
浅谈原生JS实现jQuery的animate()动画示例
2017/03/08 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
2017/11/01 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
详解vue组件基础
2018/05/04 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
django中forms组件的使用与注意
2019/07/08 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
python实现猜单词游戏
2020/05/22 Python
python怎么判断素数
2020/07/01 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
毕业生毕业总结的自我评价范文
2013/11/02 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
政风行风评议个人心得体会
2014/10/29 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书