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读取html中指定元素生成excle文件示例
Apr 03 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
Jun 14 Python
python算法表示概念扫盲教程
Apr 13 Python
Python浅复制中对象生存周期实例分析
Apr 02 Python
如何利用python查找电脑文件
Apr 27 Python
dataframe 按条件替换某一列中的值方法
Jan 29 Python
Python OpenCV利用笔记本摄像头实现人脸检测
Aug 20 Python
Python中使用gflags实例及原理解析
Dec 13 Python
浅谈Python访问MySQL的正确姿势
Jan 07 Python
python如何求100以内的素数
May 27 Python
Python3利用openpyxl读写Excel文件的方法实例
Feb 03 Python
python爬取新闻门户网站的示例
Apr 25 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数据库调用类调用实例(详细注释)
2012/07/12 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
Window.Open如何在同一个标签页打开
2014/06/20 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
2020/08/10 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
python中threading超线程用法实例分析
2015/05/16 Python
python简单操作excle的方法
2018/09/12 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
python把转列表为集合的方法
2019/06/28 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
斯凯奇新西兰官网:SKECHERS新西兰
2018/02/22 全球购物
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
C++面试题目
2013/06/25 面试题
内容编辑个人求职信
2013/12/10 职场文书
电视购物广告词
2014/03/19 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android
Java 超详细讲解IO操作字节流与字符流
2022/03/25 Java/Android
Golang 字符串的常见操作
2022/04/19 Golang