Python中logging.config配置文件解读

下面的函数用于配置logging模块,它们位于logging.config模块中。你可以使用这些函数来配置,也可以在logging或是logging.handlers中声明它们来配置。
logging.config.dictConfig(config)
   从dictionary中获取logging配置
logging.config.fileConfig(fname, defaults=None, disable_existing_loggers=True)
   从指定的fname的配置文件中读取logging配置文件,文件格式参见
   https://docs.python.org/2/library/logging.config.html#logging-config-fileformat
   该函数可以在应用程序中多次调用
logging.config.listen(port=DEFAULT_LOGGING_CONFIG_PORT)
在指定端口启动socket server并侦听新配置
logging.config.stopListening()
    关闭先前正在侦听的server

Configuration file format
被fileConfiguration()所理解的配置文件格式基于configparser功能。配置文件必须包含[loggers], [handlers]和[formatters],它们分别代表日志文件中定义的每种类型的实体。对这3种实体,后面有一个单独的section来定义该实体如何配置。
因此,[loggers]节中名为log01的logger,相关的配置文件细节在[logger_log01]节中定义。类似地,[handlers]节中名为
hand01的handler将在[handler_hand01]节中声明,[formatters]节中的form01将在[formatter_form01]声明。root logger配置必须在[logger_root]节声明。
注意:fileConfig() API比dictConfig()旧,并不包含logging某些方面的功能。建议以后尽量使用dictConfig API。
配置文件的例子如下:
[loggers]
keys=root,log02,log03,log04,log05,log06,log07

[handlers]
keys=hand01,hand02,hand03,hand04,hand05,hand06,hand07,hand08,hand09

[formatters]
keys=form01,form02,form03,form04,form05,form06,form07,form08,form09

root logger必须指定一个级别和handlers列表。示例如下:
[logger_root]
level=NOTSET
handlers=hand01
其中level可以是DEBUG, INFO, WARNING, ERROR, CRITICAL or NOTSET之一,仅对root logger来说,NOTSET意味着所有的log message
都会记录。对非root的logger,强制要求一些额外信息,比如
[logger_parser]
level=DEBUG
handlers=hand01
propagate=1
qualname=compiler.parser
当一个非root的logger中level被配置为NOSET,它将通过上一级的logger来确定当前logger的有效级别。propagete为1表示message必须传播到上一级logger中,为0表示不传。qualname表示该logger的层级channel名称,这就是说,应用程序使用该名称可以得到该logger对象。
handler类型很多,主要有StreamHandler,FileHandler,NullHandler,SysLogHandler,HTTPHandler等,详见
https://docs.python.org/2/library/logging.handlers.html#module-logging.handlers

handler节对应的配置示例如下:
[handler_hand01]
class=StreamHandler
level=NOTSET
formatter=form01
args=(sys.stdout,)

class表示该handler在logging包命名空间中的类名,level表示logger的级别,NONSET表示要记录所有日志。
formatter表示该handler的formatter的键名,假如空白的话,就使用默认值logging._defaultFormatter。假如formatter指定了该名字,必须在对应的section声明。args字段是handler类的构造函数的变量列表,参考相关handler构造函数,或者下面的例子,去观察通常的元素是如何构造的。比如:
[handler_hand02]
class=FileHandler
level=DEBUG
formatter=form02
args=('python.log', 'w')

下面是formatter的配置
[formatter_form01]
format=F1 %(asctime)s %(levelname)s %(message)s
datefmt=
class=logging.Formatter
format字段是全局格式字符串,datefmt是strftime()兼容的date/time格式字符串,为空时使用默认的ISO8601格式,比如2003-01-23 00:29:50,411,class字段表示formatter的类名,

日志级别如下:
Level Numeric value
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET 0

logging.handlers解读

logging模块中定义了这3个handler:StreamHandler, FileHandler and NullHandler
其它的handler都在logging.handler中定义,一并说明如下:
StreamHandler
该类位于logging包,将logging output输出到流中,比如sys.stdout,sys.stderr或任何支持write()和flush()方法的类文件对象
class logging.StreamHandler(stream=None)
假如指定了stream名称,日志将输出到流实例中,否则,日志输出到sys.stderr

FileHandler
该类位于logging包,将logging output输出到磁盘文件中,文件默认无限增长
class logging.FileHandler(filename, mode='a', encoding=None, delay=False)
打开指定的文件并记录日志,假如mode没有设置,默认使用'a'表示追加日志到文件中。

NullHandler
该对象什么也不处理

WatchedFileHandler
一个FileHandler实例,监视日志文件的变化,假如文件变化了,它会关闭并重新打开,不建议在Windows下使用
文件的变化可以发生,当应用程序使用newsyslog和logrotate来实现日志文件的回滚时。这个handle是在Unix/Linux下面,监视文件是否改变。(一个文件认为改变了,假如它的device厚实inode已经改变),将旧的文件关闭,这个流打开。
class logging.handlers.WatchedFileHandler(filename[, mode[, encoding[, delay]]])
指定的文件被打开,用来记录日志,假如mode未指示,默认使用a

RotatingFileHandler
支持磁盘文件的回滚
class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0)
你可以使用 maxBytes和backupCount值去让日志文件在预设大小时回滚。只要日志文件在长度上接近maxBytes时,就会关闭旧日志文件,打开一个新的日志文件,实现回滚。假如maxBytes或backupCount为0,回滚不会发生。假如backupCount非零,系统会备份旧文件,文件名后加‘.1’, ‘.2’ 。比如,日志文件名为app.log,backupCount为5,将会得到app.log, app.log.1, app.log.2, 直到app.log.5这6个文件。写入日志的文件总是app.log,当这个文件填满时,就关闭它并重命名为app.log.1, 假如还存在app.log.1, app.log.2等文件,就逐一改名为app.log.2, app.log.3等等。

TimedRotatingFileHandler
支持在指定时间段内回滚日志
class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False)
回滚基于when和interval设置,when指定interval的类型,参见下表,大小写不敏感,默认按小时回滚
Value Type of interval
'S' Seconds
'M' Minutes
'H' Hours
'D' Days
'W0'-'W6' Weekday (0=Monday)
'midnight' Roll over at midnight
回滚扩展名使用strftime format %Y-%m-%d_%H-%M-%S或其头部子字符串,当使用基于weekday的回滚时,W0表示周一,……,W6表示周日,interval的值不会用到
backupCount表示备份数,当日志很多时,新日志会覆盖旧日志,删除逻辑使用interval值去决定删除哪些日志文件
utc为true,表示使用UTC时间,否则使用本地时间

SocketHandler
通过网络套接字输出日志,SocketHandler类的基类使用TCP socket
class logging.handlers.SocketHandler(host, port)
向指定地址和端口的远程主机发送日志

DatagramHandler
继承自基类SocketHandler类,使用UDP socket发送日志message
class logging.handlers.DatagramHandler(host, port)

SysLogHandler
发送日志到远程或是本地unix syslog
class logging.handlers.SysLogHandler(address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM)

NTEventLogHandler
发送日志消息到本地Windows NT, Windows 2000 or Windows XP event log
class logging.handlers.NTEventLogHandler(appname, dllname=None, logtype='Application')

SMTPHandler
通过SMTP将日志消息发送到email address

MemoryHandler
支持将日志message缓存到内存中,周期性刷新日志到target handler
class logging.handlers.BufferingHandler(capacity)
class logging.handlers.MemoryHandler(capacity, flushLevel=ERROR, target=None)

HTTPHandler
使用GET或是POST,将日志message发送到web server
class logging.handlers.HTTPHandler(host, url, method='GET')

参考文献
[1].https://docs.python.org/2/library/logging.config.html#module-logging.config
[2].https://docs.python.org/2/library/logging.html#module-logging

Python中logging.config配置文件解读相关推荐

  1. ATS 5.3.0中parent.config配置文件解读

    该博文翻译自参考文献[1] parent.config parent.config文件识别用在缓存分级中的父代理,用这个文件去执行下面的配置: 搭建父分级缓存,兼容多父级缓存和父级缓存故障转移 配置指 ...

  2. Python中logging模块的基本用法

    本文首发于:行者AI 在开发项目时,我们不可能将所有的信息都打印在控制台中.我们可以使用Python标准库提供的logging API来处理.相比print,logging模块提供了许多强大而灵活的功 ...

  3. Python中常用的配置文件

    Python中常用的配置文件 常见的配置文件 py文件 变量方式 类方式 yaml文件 yaml文件基础知识 yaml作为配置文件 python读取yaml文件 python写入yaml文件 yaml ...

  4. 用python配置文件_使用。Python中的Py配置文件,python

    python中使用.py配置文件 一.格式: ​ 创建一个config.py文件 ​ 在文件中加配置: DEBUG=True dm_connect = { "dm_host":&q ...

  5. Python 中常见的配置文件写法

    相信学习Python或者正在进行Python工作的小伙伴都会有一个疑问,为什么要写配置文件呢?在开发过程中,我们常常会用到一些固定参数或者是常量.对于这些较为固定且常用到的部分,往往会将其写到一个固定 ...

  6. Python中常见的配置文件写法分享!

    相信学习Python或者正在进行Python工作的小伙伴都会有一个疑问,为什么要写配置文件呢?在开发过程中,我们常常会用到一些固定参数或者是常量.对于这些较为固定且常用到的部分,往往会将其写到一个固定 ...

  7. 站长在线零基础Python完全自学教程20:在Python中使用正则表达式完全解读

    欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第20课< 在Python中使用正则表达式完全解读>.本节课是一个大课,我分 ...

  8. 站长在线零基础Python完全自学教程18:Python中的集合完全解读

    欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第18课< Python中的集合完全解读>.本节课是一个大课,我分了这些知识 ...

  9. 零基础Python完全自学教程17:Python中的字典完全解读

    欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第17课< Python中的字典完全解读>.本节课是一个大课,我分了这些知识 ...

最新文章

  1. 设计模式六大原则之白话讲解
  2. kafka教程视频百度网盘下载,聊一聊-MySQL-数据库中的那些锁
  3. 从后台传给前台的url字符串值的注意事项
  4. sc.next在java什么意思_sc.next() 和 nextLine 的原理
  5. java搜索引擎创建索引_搜索引擎系列 ---lucene简介 创建索引和搜索初步
  6. 全网销售额超 2.67 亿!德施曼连续 5 年蝉联双11全网智能锁销冠
  7. C++函数free和delete如何操作指针?
  8. 基于阿里开源的COLA架构和DDD领域驱动设计构建货物运输系统
  9. 用python实现闯越顶岗实习签到
  10. 单片机课设中期报告_基于单片机的火灾自动报警系统 中期报告
  11. 数据结构与算法——深入理解红-黑树!
  12. 天猫总裁靖捷详解新零售:传统商圈平均增长超50%
  13. Revisiting Pixel-Wise Supervision for Face Anti-Spoofing
  14. 汽车充电桩检测设备TK4860C交流充电桩检定装置
  15. 寻路机器人单片机程序示例_单片机典型案例开发(四)
  16. 吴穹:金融行业已来到全面推行数字化研发管理的时点
  17. 全球及中国半导体环氧模塑料产业前景预测及供需分析报告2021~2026年
  18. DWL-2100AP 默认登录帐号密码
  19. 解读凯文·凯利《失控》
  20. 五子棋——人机博弈(Java实现)

热门文章

  1. Git 常见问题记录
  2. DBUtils 笔记
  3. flex java socket通信
  4. 关于OGNL表达式中的%,$,#
  5. usaco Factorials
  6. java 集合 接口_Java集合之Collection接口
  7. rust8G内存够不够用_多线程?怎么用?
  8. php for等边三角形,利用js实现等腰三角形
  9. c语言表达式3178的值为,【C语言】C语言运算符
  10. 循环爬取图片_Java爬取简单的网页内容和图片