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使用rsa加密算法模块模拟新浪微博登录
Jan 22 Python
python通过邮件服务器端口发送邮件的方法
Apr 30 Python
Python中的自省(反射)详解
Jun 02 Python
python3读取MySQL-Front的MYSQL密码
May 03 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
简单实现python数独游戏
Mar 30 Python
Python用字典构建多级菜单功能
Jul 11 Python
python基于celery实现异步任务周期任务定时任务
Dec 30 Python
Python Mock模块原理及使用方法详解
Jul 07 Python
python 线程的五个状态
Sep 22 Python
python基于tkinter制作m3u8视频下载工具
Apr 24 Python
Python实战之OpenCV实现猫脸检测
Jun 26 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
德生S2000电路分析
2021/03/02 无线电
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
Vue数字输入框组件使用方法详解
2020/02/10 Javascript
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
Django Admin实现上传图片校验功能
2016/03/06 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
Python对象的属性访问过程详解
2020/03/05 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
python中threading开启关闭线程操作
2020/05/02 Python
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
两道JAVA笔试题
2016/09/14 面试题
毕业实习个人鉴定范文
2013/12/10 职场文书
索桥的故事教学反思
2014/02/06 职场文书
出国留学英文自荐信
2015/03/25 职场文书
预备党员群众意见
2015/06/01 职场文书