社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  翻译

[精华] [翻译]python的logging模块配置文件的格式

Py站长 • 11 年前 • 11454 次点击  

翻译原文:http://docs.python.org/2/library/logging.config.html

配置文件的格式是由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, CRITICALNOTSET 中的一个. 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的子类可以通过一种可伸缩的格式来展现更多的异常信息.

注解:笔者的一个完整的例子可见如下(ptailfile的源码):

[loggers]
keys=root, tailfile, tt2-client

[handlers]
keys=consoleHandler, fileHandler

[formatters]
keys=richFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_tailfile]
level=DEBUG
qualname=tailfile
handlers=fileHandler

[logger_tt2-client]
level=DEBUG
qualname=tt2-client
handlers=fileHandler

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=richFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=handlers.TimedRotatingFileHandler
level=DEBUG
formatter=richFormatter
args=('../log/ptailfile.log', 'D', 1, 0)




    
[formatter_richFormatter]
format=%(asctime)s - %(name)s - %(module)s -%(threadName)s- %(levelname)s - %(message)s
class=logging.Formatter
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/85
 
11454 次点击  
文章 [ 1 ]  |  最新文章 11 年前
paomian
Reply   •   1 楼
paomian    11 年前

nice