开发者可以通过三种方式配置日志记录:

  1. 调用配置方法的Python代码显式创建记录器、处理程序和格式化程序。
  2. 创建日志配置文件并使用fileConfig() 函数读取。
  3. 创建配置信息字典并将其传递给dictConfig()函数。

相对第一种,第二种使用配置文件方式更有优势,主要是配置和代码的分离,结构上更清晰,以及非开发者轻松修改日志记录属性的能力。

本文将介绍第二种使用配置文件方式记录Python程序日志,将Python程序日志分别打印到控制台和日志文件,日志文件按时间戳滚动迭代,且可以自动删除过期文件。

配置文件方式打印日志

首先创建配置文件logging.conf,以下是文件内容。这里主要介绍TimedRotatingFileHandler的配置参数args,第一个参数/var/log/demo3/example.log表示日志输出的文件目录,第二个参数d表示以天为单位迭代日志文件,第三个参数1表示每隔1个周期,第二个参数和第三个参数相乘表示每隔几个周期迭代一个日志文件,第四个参数3表示仅保留三个日志文件,超过该值的日志文件会被自动清除。

[loggers]
keys=root [handlers]
keys=consoleHandler,timedRotatingFileHandler [formatters]
keys=simpleFormatter [logger_root]
level=INFO
handlers=consoleHandler,timedRotatingFileHandler [handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=simpleFormatter
args=(sys.stdout,) [handler_timedRotatingFileHandler]
class=handlers.TimedRotatingFileHandler
level=INFO
formatter=simpleFormatter
args=('/var/log/demo3/example.log','d',1,3) [formatter_simpleFormatter]
format=%(asctime)s %(name)s %(levelname)s - %(message)s
datefmt=

编写Python程序,使用fileConfig() 函数读取配置文件,测试打印各种类型的日志。可以看出使用配置文件的方式打印日志,程序结构很清晰。

import logging.config
logging.config.fileConfig('logging.conf') # create logger
logger = logging.getLogger() logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')

运行Python程序,控制台和日志文件输出以下内容:

2020-11-03 20:50:49,434 simple_example.py INFO - info message
2020-11-03 20:50:49,435 simple_example.py WARNING - warn message
2020-11-03 20:50:49,435 simple_example.py ERROR - error message
2020-11-03 20:50:49,435 simple_example.py CRITICAL - critical message

参考资料

https://docs.python.org/zh-cn/3/howto/logging.html#logging-advanced-tutorial 进阶日志教程

使用配置文件方式记录Python程序日志的更多相关文章

  1. 优雅地记录Python程序日志1:logging模块简介

    本文摘自:https://zhuanlan.zhihu.com/p/31893724 本篇涉及: logging模块的调用: 保存log日志为文件: 调整输入日志等级: 修改日志消息格式: 前言 在使 ...

  2. 优雅地记录Python程序日志2:模块组件化日志记录器

    本文摘自:https://zhuanlan.zhihu.com/p/32043593 本篇将会涉及: logging的各个模块化组件 构建一个组件化的日志器 logging的模块组件化 在上一篇文章中 ...

  3. Beats:使用 Elastic Stack 记录 Python 应用日志

    文章转载自:https://elasticstack.blog.csdn.net/article/details/112259500 日志记录实际上是每个应用程序都必须具备的功能.无论你选择基于哪种技 ...

  4. python + docker, 实现天气数据 从FTP获取以及持久化(五)-- 利用 Docker 容器化 Python 程序

    背景 不知不觉中,我们已经完成了所有的编程工作.接下来,我们需要把 Python 程序 做 容器化 (Docker)部署. 思考 考虑到项目的实际情况,“持久化天气”的功能将会是一个独立的功能模块发布 ...

  5. Python 简明教程 --- 2,第一个Python 程序

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那你肯定是用错方法了. -- Carig Zerouni 当你在自己的电脑上 ...

  6. 所有 Python 程序员必须要学会的「日志」记录。

    本文字数:3840 字 阅读本文大概需要:10 分钟 写在之前 在我们的现实生活中,「日志记录」其实是一件非常重要的事情,比如银行的转账记录,汽车的行车记录仪记录行驶过程中的一切,如果出现了什么问题, ...

  7. [转载] 每个 Python 程序员都要知道的日志实践

    原文: http://python.jobbole.com/81666/ 在现实生活中,记录日志非常重要.银行转账时会有转账记录:飞机飞行过程中,会有黑盒子(飞行数据记录器)记录飞行过程中的一切.如果 ...

  8. 每个 Python 程序员都要知道的日志实践

    在现实生活中,记录日志非常重要.银行转账时会有转账记录:飞机飞行过程中,会有黑盒子(飞行数据记录器)记录飞行过程中的一切.如果有出现什么问题,人们可以通过日志数据来搞清楚到底发生了什么. 对于系统开发 ...

  9. Python 配置日志的几种方式

    Python配置日志的几种方式 作为开发者,我们可以通过以下3种方式来配置logging: (1)使用Python代码显式的创建loggers,handlers和formatters并分别调用它们的配 ...

随机推荐

  1. ThreadLocal什么时候会出现OOM的情况?为什么?

    ThreadLocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. 最好 ...

  2. 手把手教你AspNetCore WebApi:缓存(MemoryCache和Redis)

    前言 这几天小明又有烦恼了,系统上线一段时间后,系统性能出现了问题,马老板很生气,叫小明一定要解决这个问题.性能问题一般用什么来解决呢?小明第一时间想到了缓存. 什么是缓存 缓存是实际工作中非常常用的 ...

  3. day29 Pyhton 面向对象 继承进阶

    一.内容回顾 初识继承 父类\基类\超类 子类\派生类 派生 :派生方法.派生属性 单继承 继承的语法class子类名(父类名) 解决开发中代码冗余的问题 子类继承了父类之后,可以调用父类中的方法 如 ...

  4. C++里面类和对象是什么意思?

    本文章向大家介绍C++类和对象到底是什么意思?,主要包括C++类和对象到底是什么意思?使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下.   C++ 是一门 ...

  5. spring boot:用cookie保存i18n信息避免每次请求时传递参数(spring boot 2.3.3)

    一,用cookie保存i18n信息的优点? 当开发一个web项目(非api站)时,如果把i18n的选择信息保存到cookie, 则不需要在每次发送请求时都传递所选择语言的参数, 也不需要增加heade ...

  6. spring boot:使用多个redis数据源(spring boot 2.3.1)

    一,什么情况下需要使用多个redis数据源? 为了缓存数据,通常我们会在线上使用多个redis的cluster, 每个cluster中缓存不同的数据,以方便管理. 例如:我们缓存了杂志文章/商品信息/ ...

  7. ImageMagick实现图片加水印(ImageMagick6.9.10)

    一,ImageMagick的安装 请参见: https://www.cnblogs.com/architectforest/p/12807514.html 说明:刘宏缔的架构森林是一个专注架构的博客, ...

  8. Linux命令的内部命令执行

    一个命令可能既是内部命令也是外部命令 因为内部命令优先级高,先执行内部命令 [04:21:44 root@C8[ ~]#type -a echo echo is a shell builtin ech ...

  9. py中变量名的“秘密”

    今天突然脑子发抽,想到py里有没有指针这个概念,于是我马上google.baidu了一波,发现网上大多都在说py.java.c#这类纯面向对象的编程语言用对象的概念能完全替代指针.那么问题来了,没有指 ...

  10. python第二章:控制流

    变成实际上是一个过程的提现,每个过程都是有多个流程块组成. 比如:判断是否下雨的过程 1.布尔值 在第一章最后举例了比较操作后,最终返回的结果 True or False True 和 False是一 ...