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 实现插入排序算法
Jun 05 Python
python基于Tkinter库实现简单文本编辑器实例
May 05 Python
小小聊天室Python代码实现
Aug 17 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
pytorch 常用线性函数详解
Jan 15 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
Mar 03 Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 Python
面向新手解析python Beautiful Soup基本用法
Jul 11 Python
详解非极大值抑制算法之Python实现
Jun 28 Python
Python绘画好看的星空图
Mar 17 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使用递归生成文章树
2015/04/21 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
取得传值的函数
2006/10/27 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
JavaScript运算符小结
2015/06/03 Javascript
JQ技术实现注册页面带有校验密码强度
2015/07/27 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
低碳生活倡议书
2014/04/14 职场文书
考试诚信承诺书
2014/05/23 职场文书
护士找工作求职信
2014/07/02 职场文书
汽修专业自荐信
2014/07/07 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
办公室日常管理制度
2015/08/04 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
Python turtle实现贪吃蛇游戏
2021/06/18 Python
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL