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系列之数据处理编程实例(二)
May 22 Python
python实现去除下载电影和电视剧文件名中的多余字符的方法
Sep 23 Python
Fiddler如何抓取手机APP数据包
Jan 22 Python
对python 命令的-u参数详解
Dec 03 Python
Python实现删除排序数组中重复项的两种方法示例
Jan 31 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 Python
Tensorflow tf.tile()的用法实例分析
May 22 Python
利用python下载scihub成文献为PDF操作
Jul 09 Python
使用django自带的user做外键的方法
Nov 30 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
基于mysql的bbs设计(二)
2006/10/09 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
PHP 错误处理机制
2015/07/06 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
python编程之requests在网络请求中添加cookies参数方法详解
2017/10/25 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
python实现二分查找算法
2020/09/18 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
台湾家适得:Homeget
2019/02/11 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
LINUX下线程,GDI类的解释
2012/04/17 面试题
《诺贝尔》教学反思
2014/02/17 职场文书
政风行风评议个人心得体会
2014/10/29 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书
微信小程序APP页面的之间的相互传递参数以及自定义组件
2022/04/19 Javascript