python中的logging模块用于记录日志。用户可以根据程序实现需要自定义日志输出位置、日志级别以及日志格式。

将日志内容输出到屏幕

一个最简单的logging模块使用样例,直接打印显示日志内容到屏幕。

importlogging

logging.critical("critical log")

logging.error("error log")

logging.warning("warning log")

logging.info("info log")

logging.debug("debug log")

输出结果如下:

CRITICAL:root:critical log

ERROR:root:error log

WARNING:root:warning log

说明:默认情况下python的logging模块将日志打印到标准输出,并且只显示大于等于warning级别的日志(critical > error > warning > info > debug)。

将日志内容输出到文件

将日志事件记录到文件是一种非常常见的情况,方便出现问题时快速定位问题。在logging模块默认配置条件下,记录日志内容,代码如下:

importlogging

logging.basicConfig(filename='example.log',level=logging.DEBUG)

logging.debug('This message should go to the log file')

logging.info('So should this')

logging.warning('And this, too')

输出结果如下:

D:\pycharm\work>type example.log

DEBUG:root:This message should go to the log file

INFO:root:So should this

WARNING:root:And this, too

说明:type为dos窗口下查看文件内容命令。

定制日志内容(日志级别、日志格式)

根据程序运行对日志记录的要求,通常需要自定义日志显示格式、输出位置以及日志显示级别。可以通过logging.basicConfig()定制满足自己要求的日志输出格式。

importlogging

logging.basicConfig(format='[%(asctime)s %(filename)s line:%(lineno)d] %(levelname)s: %(message)s',

level=logging.DEBUG, filename="log.txt", filemode="w")

logging.debug('This message should appear on the console')

logging.info('So should this')

logging.warning('And this, too')

输出结果如下:

D:\pycharm\work>type log.txt

[2020-02-02 10:31:42,994 json_pro.py line:5] DEBUG: This message should appear on the console

[2020-02-02 10:31:42,995 json_pro.py line:6] INFO: So should this

[2020-02-02 10:31:42,995 json_pro.py line:7] WARNING: And this, too

通过修改logging.basicConfig()函数中参数取值来定制日志显示。函数参数定义及含义如下:

filename指定日志写入文件名。

filemode文件打开方式,默认值为"a"

format设置日志显示格式

dateft设置日期时间格式

level设置显示日志级别

stream指定stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件。默认为sys.stderr。

format参数用到的格式化字符串如下:

%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒

%(filename)s 调用日志输出函数的模块的文件名

%(levelname)s 文本形式的日志级别

%(funcName)s 调用日志输出函数的函数名

%(lineno)d 调用日志输出函数的语句所在的代码行

%(message)s 用户输出的消息

%(module)s 调用日志输出函数的模块名

多模块记录日志

如果开发的程序包含多个模块,就需要考虑日志间的记录方式。基本样例如下:

主程序文件:

#myapp.py

importloggingimportmylibdefmain():

logging.basicConfig(format='[%(asctime)s %(filename)s line:%(lineno)d] %(levelname)s: %(message)s',

level=logging.DEBUG, filename="log.txt", filemode="w")

logging.info('Started')

mylib.do_something()

logging.info('Finished')if __name__ == '__main__':

main()

模块mylib.py的代码如下:

importloggingdefdo_something():

logging.info('Doing something')

输出结果如下:

D:\pycharm\work>type log.txt

[2020-02-02 10:54:52,074 json_pro.py line:8] INFO: Started

[2020-02-02 10:54:52,074 mylib.py line:4] INFO: Doing something

[2020-02-02 10:54:52,074 json_pro.py line:10] INFO: Finished

日志同时输出屏幕和写入文件

logging模块可以通过FileHander和StreamHandler分别制定向文件和屏幕输出。

importlogging

logger= logging.getLogger() #不加名称设置root logger

logger.setLevel(logging.DEBUG)

formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: - %(message)s',

datefmt='%Y-%m-%d %H:%M:%S')#使用FileHandler输出到文件

fh = logging.FileHandler('log.txt')

fh.setLevel(logging.DEBUG)

fh.setFormatter(formatter)#使用StreamHandler输出到屏幕

ch =logging.StreamHandler()

ch.setLevel(logging.DEBUG)

ch.setFormatter(formatter)#添加两个Handler

logger.addHandler(ch)

logger.addHandler(fh)

logger.info('this is info message')

logger.warning('this is warn message')

控制台输出如下:

[2020-02-02 10:58:16 json_pro.py line:22] INFO: this isinfo message

[2020-02-02 10:58:16 json_pro.py line:23] WARNING: this is warn message

日志文件内容如下:

D:\pycharm\work>type log.txt

[2020-02-02 10:58:55 json_pro.py line:22] INFO: this isinfo message

[2020-02-02 10:58:55 json_pro.py line:23] WARNING: this is warn message

小结

本文介绍了记录日志模块logging基本场景使用实例。如果需要更好、更灵活的使用logging模块查看官方帮助文档:https://docs.python.org/zh-cn/3/howto/logging.html

python中的logging记录日志_[ Python入门教程 ] Python中日志记录模块logging使用实例...相关推荐

  1. python海龟作图好看图案_编程入门 06:Python 海龟绘图

    编程入门 06:Python 海龟绘图 现在让我们开始尝试图形用户界面 (GUI) 程序的编写 Python 标准库中有个 turtle 模块, 可以生成标准的应用程序窗口进行图形绘制 turtle ...

  2. python爬图片代码大全_爬虫入门教程⑩— 用漂亮的图表展示爬取到的数据

    经过了前面的努力,我们成功获取到了数据,并且学会了保存,但是只是用网页展示出来,是不是有一些不够美观呢? 所以本节的内容是:数据的可视化.拿到了数据却不能使其简单易懂并且足够突出,那就是不是好的数据工 ...

  3. python 选择文件对话框插件_[ PyQt入门教程 ] PyQt5基本控件使用:消息弹出、用户输入、文件/目录选择对话框...

    本文主要介绍PyQt界面实现中常用的消息弹出对话框.提供用户输入的输入框.打开文件获取文件/目录路径的文件对话框.学习这三种控件前,先想一下它们使用的主要场景: 1.消息弹出对话框.程序遇到问题需要退 ...

  4. python连接linux获取日志_Python 日志记录模块logging的使用

    shell当中记录log,满眼花花的重定向符合,看着很不爽有没有!我喜欢Python,就是喜欢这种买个手电筒,备用电池都准备好了的感觉.logging模块很简单,导入模块,定义日志格式.代码中就可以通 ...

  5. python语言程序设计 梁勇_计算机二级教程 Python语言程序设计,第9章Python标准库概览...

    第九章学习知识导图 考点主要是: 1) 标准库: turtle库(必选) 2) 标准库: random库(必选).time库(可选) 3) 作者归纳:这章考大题和选择题的读程序题,本章结束,pytho ...

  6. 关于python的浮点数类型、以下_python入门教程Python 浮点数数据类型详解 [学习 Python 必备基础知识][看此一篇就够了]...

    python基础语法.jpg 您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其 ...

  7. keil obj 文件 结构_【Python】数据分析前的入门教程 Python For Everybody P2:数据结构...

    这是密歇根大学课程Python For Everybody总结的P2部分.课程总结P1部分的地址如下: P1: 零基础程序设计(Python 入门) carolinezhq:[Python]数据分析前 ...

  8. python快速编程入门教程-python从入门到精通之30天快速学python视频教程

    python从入门到精通之30天快速学python视频教程 课程目录: python入门教程-1-Python编程语言历史及特性.mkv python入门教程-2-Python编程语言初接触.mkv ...

  9. Python入门教程 | Python学习的必经阶段

    很多小伙伴在学习Python之前会犹犹豫豫,生怕自己学了半天之后白费力气.然而Python学习并不能一蹴而就,有些入门教程只讲究快速,却忽略了一些小白进阶中必备的阶段努力.  阶段一:前辈领进门. 第 ...

最新文章

  1. Java Struts2 (一)
  2. matlab中inband函数,pjsip 实现 DTMF 数据获取,并解析按键信息
  3. python 字符串和容器总结
  4. Nginx源码阅读(ngx_http_process_request_line)
  5. Linux环境下安装RocketMQ(MetaQ)
  6. 汇编 if else
  7. 查看docker容器日志
  8. JavaScript正则表达式快速简单的指南
  9. 寒心!一个开发者就这样离开了!
  10. Android修改状态栏的背景颜色
  11. Solr分析器IK-analyzer配置及错误java.lang.AbstractMethodError解决
  12. 深入解读Linux内存管理系列(8)——SLAB初始化
  13. 总结:86版五笔输入法
  14. 多级联动下拉菜单 支持中英文检索
  15. 打造自己的博客(一)利用VuePress完成博客整体搭建,并支持评论和自动发布
  16. 迅雷看看引领高清内容多屏合一新趋势
  17. 点击图片放大缩小功能
  18. 数据挖掘十大经典算法,你都知道哪些?
  19. python求素数平均值_用python怎么求素数
  20. 开机提示小娜无法在本计算机运行,解决Win10正式版开始菜单与小娜打不开问题的三种方法...

热门文章

  1. 海贼王热血航线正在连接服务器,《航海王热血航线》无法进入原因和解决方法 进不去如何解决...
  2. matlab怎么实现拖音,请问M8190A怎么通过Matlab实现多音调
  3. 如何用C语言编写wav读取函数,C++读取WAV音频文件的头部数据的实现方法
  4. mysql四个对勾_Mysql like查询语句中,结果包含反斜杠 \ 字符的,需要替换成四个反斜杠 \\\\...
  5. 交换机端口mtu值最大_大中型监控系统如何正确选择交换机
  6. sw标准件不能配置_思科设备与华为设备在配置Telnet,有啥不一样呢?
  7. 从 Windows 切换到 Mac,不能错过这9条Tips
  8. 热议!“建议放学时间与父母下班时间一致”,网友:陪我一起996吗?
  9. 2020年Spring Cloud最后一个大版本发布!
  10. 这四个问题场景你会排查原因吗?看看高手是如何使用 Arthas 快速定位原因的!...