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自动化测试实例解析
Sep 28 Python
深入理解Python中各种方法的运作原理
Jun 15 Python
深入解读Python解析XML的几种方式
Feb 16 Python
深入理解Python变量与常量
Jun 02 Python
python实现栅栏加解密 支持密钥加密
Mar 20 Python
Python零基础入门学习之输入与输出
Apr 03 Python
selenium 安装与chromedriver安装的方法步骤
Jun 12 Python
Python 转换文本编码实现解析
Aug 27 Python
用python画一只可爱的皮卡丘实例
Nov 21 Python
python实现拼图小游戏
Feb 22 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
python 通过文件夹导入包的操作
Jun 01 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正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
激活 ActiveX 控件
2006/10/09 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
jquery 使用简明教程
2014/03/05 Javascript
Javascript动画的实现原理浅析
2015/03/02 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
Vue表单实例代码
2016/09/05 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
Python入门篇之字符串
2014/10/17 Python
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
简单了解django文件下载方式
2020/02/10 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
python爬取2021猫眼票房字体加密实例
2021/02/19 Python
美国学校用品、教室和教学商店:Discount School Supply
2018/04/04 全球购物
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
人事主管岗位职责范本
2013/12/04 职场文书
2014年会演讲稿范文
2014/01/06 职场文书
总裁助理岗位职责
2014/02/17 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android