python的logging模塊配置文件的格式

python的logging模塊配置文件的格式
2008/01/08 16:48
====================================
python的logging模塊配置文件的格式
====================================

:原文url: http://docs.python.org/lib/logging-config-fileformat.html
:譯者: [email protected]
:日期:    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格式看吧.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章