Python使用logging模块实现打印log到指定文件的方法


Posted in Python onSeptember 05, 2018

本文实例讲述了Python使用logging模块实现打印log到指定文件的方法。分享给大家供大家参考,具体如下:

可能我们经常会使用print来输出信息到窗口,但当我们有很多个py文件需要运行,项目比较庞大的到时候,print简直就是太low了点了。那么我们可以使用强大的logging模块,把输出到指定的本地pc某个路径的文件中。

一、logging的框架

1、 Loggers: 可供程序直接调用的接口,app通过调用提供的api来记录日志

2、 Handlers: 决定将日志记录分配至正确的目的地

3、 Filters:对日志信息进行过滤,提供更细粒度的日志是否输出的判断

4、 Formatters: 制定最终记录打印的格式布局

二、Log级别

系统默认有6个级别,优先级:

CRITICAL    50

ERROR      40

WARNING   30

INFO        20

DEBUG      10

NOTSET     0

设置要打印的log时只需要设置优先级,比如设置打印INFO,那么比INFO优先级高的WARNING/ERROR/CRITICAL都将被打印。

三、正常的打印

Python使用logging模块实现打印log到指定文件的方法

这里只输出了ERROR和WARNING的信息,是因为logging默认的输出级别是WARNING。

四、输出到指定文件

来看看这样写的代码:

import logging
import unittest
class lgtest(unittest.TestCase):
  logging.basicConfig(filename='../LOG/'+__name__+'.log',format='[%(asctime)s-%(filename)s-%(levelname)s:%(message)s]', level = logging.DEBUG,filemode='a',datefmt='%Y-%m-%d%I:%M:%S %p')
  def test(self):
    logging.error("这是一条error信息的打印")
    logging.info("这是一条info信息的打印")
    logging.warning("这是一条warn信息的打印")
    logging.debug("这是一条debug信息的打印")
if __name__=='__main__':
  unittest.main()

运行后在LOG/__main__.log文件中生成如下内容:

[2018-09-0503:21:07 PM-Logout.py-ERROR:这是一条error信息的打印]
[2018-09-0503:21:07 PM-Logout.py-INFO:这是一条info信息的打印]
[2018-09-0503:21:07 PM-Logout.py-WARNING:这是一条warn信息的打印]
[2018-09-0503:21:07 PM-Logout.py-DEBUG:这是一条debug信息的打印]

使用logging.basicConfig来指定要输出的文件以及log的输出形式、包括时间格式、日志级别等等。

  • Filename:指定路径的文件。这里使用了+—name—+是将log命名为当前py的文件名
  • Format:设置log的显示格式(即在文档中看到的格式)。分别是时间+当前文件名+log输出级别+输出的信息
  • Level:输出的log级别,优先级比设置的级别低的将不会被输出保存到log文档中
  • Filemode: log打开模式
    • a:代表每次运行程序都继续写log。即不覆盖之前保存的log信息。
    • w:代表每次运行程序都重新写log。即覆盖之前保存的log信息

五、最终的log文档

Python使用logging模块实现打印log到指定文件的方法

文件名与py文件名相同,因为basicConfig里面使用了__name__来获取的。

我们来看看内容,这是运行了两次py文件的内容:

[2018-09-0503:21:07 PM-Logout.py-ERROR:这是一条error信息的打印]
[2018-09-0503:21:07 PM-Logout.py-INFO:这是一条info信息的打印]
[2018-09-0503:21:07 PM-Logout.py-WARNING:这是一条warn信息的打印]
[2018-09-0503:21:07 PM-Logout.py-DEBUG:这是一条debug信息的打印]
[2018-09-0503:22:43 PM-Logout.py-ERROR:这是一条error信息的打印]
[2018-09-0503:22:43 PM-Logout.py-INFO:这是一条info信息的打印]
[2018-09-0503:22:43 PM-Logout.py-WARNING:这是一条warn信息的打印]
[2018-09-0503:22:43 PM-Logout.py-DEBUG:这是一条debug信息的打印]

运行一次会有4个信息打印出来,因为filemode设置成了a,所以再次运行时不会覆盖之前的log信息,就有8条信息了。

Ok,log输出到文档就这么简单。当然大家如果弄熟了可以自己写记录器、过滤器等。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python原始字符串(raw strings)用法实例
Oct 13 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
Apr 18 Python
Python如何使用内置库matplotlib绘制折线图
Feb 24 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
python自动提取文本中的时间(包含中文日期)
Aug 31 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 Python
如何用Python编写一个电子考勤系统
Feb 08 Python
Python 图片添加美颜效果
Apr 28 Python
Python使用try except处理程序异常的三种常用方法分析
Sep 05 #Python
python使用__slots__让你的代码更加节省内存
Sep 05 #Python
Python中__slots__属性介绍与基本使用方法
Sep 05 #Python
python使用xlrd和xlwt读写Excel文件的实例代码
Sep 05 #Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 #Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
Sep 04 #Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
Sep 04 #Python
You might like
PHP概述.
2006/10/09 PHP
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
浅谈thinkphp5 instance 的简单实现
2017/07/30 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
2018/01/07 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
详解vue3中组件的非兼容变更
2021/03/03 Vue.js
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python获取电脑硬件信息及状态的实现方法
2014/08/29 Python
python socket 聊天室实例代码详解
2019/11/14 Python
python3 求约数的实例
2019/12/05 Python
浅析Python 序列化与反序列化
2020/08/05 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
个人职业生涯规划书1500字
2013/12/31 职场文书
单身联谊活动方案
2014/01/29 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
《生命 生命》教学反思
2014/04/19 职场文书
企业精神口号
2014/06/11 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书
入学证明
2015/06/23 职场文书
JavaScript使用canvas绘制坐标和线
2021/04/28 Javascript
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python