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 3.6 性能测试框架Locust安装及使用方法(详解)
Oct 11 Python
python 实现批量xls文件转csv文件的方法
Oct 23 Python
纯用NumPy实现神经网络的示例代码
Oct 24 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
Jan 04 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
Oct 06 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 Python
Python使用Selenium模拟浏览器自动操作功能
Sep 08 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 Python
Python使用protobuf序列化和反序列化的实现
May 19 Python
一行Python命令实现批量加水印
Apr 07 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
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
php使用数组填充下拉列表框的方法
2015/03/31 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
vue项目开启Gzip压缩和性能优化操作
2020/10/26 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
维德科技C#面试题笔试题
2015/12/09 面试题
自荐信如何“自荐”
2013/10/24 职场文书
人事专员岗位职责
2013/11/20 职场文书
自荐书4要点
2014/01/25 职场文书
迅雷Cued工作心得体会
2014/01/27 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
2014年资料员工作总结
2014/11/18 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
Python利用folium实现地图可视化
2021/05/23 Python
JAVA API 实用类 String详解
2021/10/05 Java/Android
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技