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 开发Activex组件方法
Nov 08 Python
Django自定义分页效果
Jun 27 Python
浅析Python中的赋值和深浅拷贝
Aug 15 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
Python中将变量按行写入txt文本中的方法
Apr 03 Python
在python中对变量判断是否为None的三种方法总结
Jan 23 Python
Python语言检测模块langid和langdetect的使用实例
Feb 19 Python
python获取网络图片方法及整理过程详解
Dec 20 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
Mar 18 Python
django配置app中的静态文件步骤
Mar 27 Python
Python实现随机生成迷宫并自动寻路
Jun 13 Python
python如何为list实现find方法
May 30 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 ajax 静态分页过程形式
2011/09/02 PHP
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
Javascript Select操作大集合
2009/05/26 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
Python MD5文件生成码
2009/01/12 Python
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
2013/12/08 Python
Python 使用os.remove删除文件夹时报错的解决方法
2017/01/13 Python
使用C++扩展Python的功能详解
2018/01/12 Python
Python线性回归实战分析
2018/02/01 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
Lancome兰蔻官方旗舰店:来自法国的世界知名美妆品牌
2018/06/14 全球购物
税务会计岗位职责
2014/02/18 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript