设为首页 收藏本站
查看: 1627|回复: 0

[经验分享] python的logging模块配置文件的格式

[复制链接]

尚未签到

发表于 2017-5-5 12:32:13 | 显示全部楼层 |阅读模式
python的logging模块配置文件的格式
2008/01/08 16:48
====================================
python的logging模块配置文件的格式
====================================

:原文url: http://docs.python.org/lib/logging-config-fileformat.html
:译者: dujunfly@gmail.com
:日期:    2008-01-08


配置文件的格式是由fileConfig()函数负责解析的,这个函数基于ConfigParser.该文件中必须包含一下几段: ``[loggers]`` , ``[handlers]`` 和 ``[formatters]`` ,用来标识文件定义的几种类型的实体.对每个这样的实体,都有一个特定的段来标识这个实体是如何配置的.比如说, ``[loggers]`` 段里面定义了一个叫log01的logger,那么关于这个logger的详细配置信息应该写在 ``[logger_loger01]`` 里面.同样的,如果 ``[handlers]`` 里面定义了一个名为hand01的handler ,那么它的详细配置信息应该放在 ``[handler_hand01]`` 里面,而 ``[formatters]`` 里面定义的form01就应该用一个名为 ``[formatter_form01]`` 的段来定义它的详细信息.对root logger来说,他的定义信息则必须放在名为 ``[logger_root]`` 的端中.

下面是一个关于配置文件中这几个段的一个示例::

    [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必须包含一个标识logging等级的level和一个包含handlers的列表.下面给出一个root logger的示例 ::
   
    [logger_root]
    level=NOTSET
    handlers=hand01

level可以是 ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, ``CRITICAL`` 或 ``NOTSET`` 中的一个. ``NOTSET`` 标识用在root logger时,也只有用在root logger时,表示所有的信息都会被记录.Level变量会在logging包命名空间的上下文中被赋值.

handlers项可以接受一个由逗号分隔的handler名字列表,这些个handler的名字必须出现在 ``[handlers]`` 段中,而且配置文件中还需要有相关的详细描述这些handler的字段.

对于除root logger外的loggers 来说,有一些额外的信息需要提供.下面是一个这方面的例子::
   
    [logger_parser]
    level=DEBUG
    handlers=hand01
    propagate=1
    qualname=compiler.parser

level和handlers项跟root logger的完全一样,如果一个非root logger的level项定义为 ``NOTSET`` ,系统会根据该logger的继承关系向上寻找一个有效的level值来作为该logger的level值. ``propagete`` 项如果为1,则表示该logger必须处理它继承的父类logger的log信息;如果为0则不必. ``qualname`` 项表示logger的分层结构的通道名,应用程序中就是用这个名字来获得这个logger的.

下面是一个定义handler的示例::
   
    [handler_hand01]
    class=StreamHandler
    level=NOTSET
    formatter=form01
    args=(sys.stdout,)

``class`` 项定义了handlers的类(通过eval()函数在logging包的命名空间中实例化).level项被用做logger的logging等级信息, ``NOTSET`` 表示记录所有的log信息.

``formatter`` 项定义用于该handler的formatter,如果为空则用默认的formatter(logging._defaultFormatter).如果不为空,那么相应的formatter名字也应该出现在 ``[formatters]`` 段中,并且应该有相应的定义段.

``args`` 项中定义的是用于handler类实例化时传给构造函数的参数.查阅相应的handler的构造函数,或者参考以下示例来看一下典型的配置项::
   
    [handler_hand02]
    class=FileHandler
    level=DEBUG
    formatter=form02
    args=('python.log', 'w')
   
    [handler_hand03]
    class=handlers.SocketHandler
    level=INFO
    formatter=form03
    args=('localhost', handlers.DEFAULT_TCP_LOGGING_PORT)
   
    [handler_hand04]
    class=handlers.DatagramHandler
    level=WARN
    formatter=form04
   
    [handler_hand05]
    class=handlers.SysLogHandler
    level=ERROR
    formatter=form05
    args=(('localhost', handlers.SYSLOG_UDP_PORT), handlers.SysLogHandler.LOG_USER)
   
    [handler_hand06]
    class=handlers.NTEventLogHandler
    level=CRITICAL
    formatter=form06
    args=('Python Application', '', 'Application')
   
    [handler_hand07]
    class=handlers.SMTPHandler
    level=WARN
    formatter=form07
    args=('localhost', 'from@abc', ['user1@abc', 'user2@xyz'], 'Logger Subject')
   
    [handler_hand08]
    class=handlers.MemoryHandler
    level=NOTSET
    formatter=form08
    target=
    args=(10, ERROR)
   
    [handler_hand09]
    class=handlers.HTTPHandler
    level=NOTSET
    formatter=form09
    args=('localhost:9022', '/log', 'GET')

``formatter`` 项用到的formatter定义如下::
   
    [formatter_form01]
    format=F1 %(asctime)s %(levelname)s %(message)s
    datefmt=
    class=logging.Formatter

``format`` 项定义了整个的格式字符串, ``datefmt`` 项可以接受跟strftime()函数兼容的时间/日期格式字符串.如果为空,则默认用ISO8601格式的日期/时间格式,ISO8601格式也定义了微秒,可以用一个逗号隔开添加到上面的格式字符串之后,ISO8601格式的一个示例是 2003-01-23 00:29:50,411.

``class`` 项是可选的,它指出了 ``formatter`` 的类名(模块名和类名通过点来分隔),这个选项在需要一个Formatter子类时很有用,Formatter的子类可以通过一种可伸缩的格式来展现更多的异常信息.

baidu空间不支持直接复制,所以直接贴上来rst文件,自己通过rst2html来转换成html格式看吧.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-373486-1-1.html 上篇帖子: [转载]Python 定义参数数量未知的函数 下篇帖子: python学习1(图片丢失,见word文档)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表