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编写一个国际象棋AI程序
Nov 28 Python
详解python的webrtc库实现语音端点检测
May 31 Python
python PyTorch参数初始化和Finetune
Feb 11 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
May 16 Python
Python实现的文本对比报告生成工具示例
May 22 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
python实现简单flappy bird
Dec 24 Python
python使用百度文字识别功能方法详解
Jul 23 Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
python和go语言的区别是什么
Jul 20 Python
Python实现区域填充的示例代码
Feb 03 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实时显示输出
2008/10/02 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
2012/03/15 Javascript
javascript基于DOM实现权限选择实例分析
2015/05/14 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
vue 组件基础知识总结
2021/01/26 Vue.js
Vue实现todo应用的示例
2021/02/20 Vue.js
Python中index()和seek()的用法(详解)
2017/04/27 Python
python实现两张图片拼接为一张图片并保存
2019/07/16 Python
tensorflow如何批量读取图片
2019/08/29 Python
python 普通克里金(Kriging)法的实现
2019/12/19 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
java关于string最常出现的面试题整理
2021/01/18 Python
介绍一下.net和Java的特点和区别
2012/09/26 面试题
物业管理员岗位职责范文
2013/11/25 职场文书
哈理工毕业生的求职信
2013/12/22 职场文书
有多年工作经验的自我评价
2014/03/02 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书