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发送邮件接收邮件示例分享
Jan 21 Python
python安装教程 Pycharm安装详细教程
May 02 Python
Django与JS交互的示例代码
Aug 23 Python
django开发教程之利用缓存文件进行页面缓存的方法
Nov 10 Python
详解python之协程gevent模块
Jun 14 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
APIStar:一个专为Python3设计的API框架
Sep 26 Python
Python3内置模块random随机方法小结
Jul 13 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
Python 如何反方向迭代一个序列
Jul 28 Python
通过Python把学姐照片做成拼图游戏
Feb 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
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
javascript实现网页背景烟花效果的方法
2015/08/06 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
基于Pyinstaller打包Python程序并压缩文件大小
2020/05/28 Python
英国著名的药妆网站:Escentual
2016/07/29 全球购物
西班牙英格列斯百货法国官网:El Corte Inglés法国
2017/07/09 全球购物
安全大检查实施方案
2014/02/22 职场文书
村党支部公开承诺书
2014/05/29 职场文书
个人自查自纠材料
2014/10/14 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
小学四年级学生评语
2014/12/26 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS