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 sys模块sys.path使用方法示例
Dec 04 Python
python抓取网页中的图片示例
Feb 28 Python
python使用多线程不断刷新网页的方法
Mar 31 Python
python使用装饰器和线程限制函数执行时间的方法
Apr 18 Python
详解Python字符串对象的实现
Dec 24 Python
Python实现自动上京东抢手机
Feb 06 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
Python编程中NotImplementedError的使用方法
Apr 21 Python
python发送多人邮件没有展示收件人问题的解决方法
Jun 21 Python
使用pyecharts生成Echarts网页的实例
Aug 12 Python
pytorch 实现模型不同层设置不同的学习率方式
Jan 06 Python
Python获取android设备cpu和内存占用情况
Nov 15 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常用函数汇总
2014/12/17 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
XENON基于JSON变种
2010/07/27 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
js分页工具实例
2015/01/28 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
Javascript地址引用代码实例解析
2020/02/25 Javascript
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
django批量导入xml数据
2016/10/16 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
python颜色随机生成器的实例代码
2020/01/10 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
最新pycharm安装教程
2020/11/18 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
中英文自我评价语句
2013/12/20 职场文书
应届优秀本科大学毕业生自我鉴定
2014/01/21 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
教师教育心得体会
2016/01/19 职场文书
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技
Echarts如何重新渲染实例详解
2022/05/30 Javascript