python文件只读打开模式是rd_python日志设置_byseyOrd

python的几种设置方式

1)使用Python代码显式的建立loggers, handlers和formatters并划分挪用它们的设置函数;

2)建立一个日志设置文件,然后使用fileConfig()函数来读取该文件的内容;

3)建立一个包罗设置信息的dict,然后把它通报个dictConfig()函数;

需要说明的是,logging.basicConfig()也属于第一种方式,它只是对loggers, handlers和formatters的设置函数举行了封装。

第二种设置方式相对于第一种设置方式的优点在于,它将设置信息和代码举行了星散

使用Python代码实现日志设置

1 #建立一个日志器logger并设置其日志级别为DEBUG

2 logger = logging.getLogger('simple_logger')3 logger.setLevel(logging.DEBUG)4

5 #建立一个流处置器handler并设置其日志级别为DEBUG

6 handler =logging.StreamHandler(sys.stdout)7 handler.setLevel(logging.DEBUG)8

9 #建立一个花样器formatter并将其添加到处置器handler

10 formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")11 handler.setFormatter(formatter)12

13 #为日志器logger添加上面建立的处置器handler

14 logger.addHandler(handler)15

16 #日志输出

17 logger.debug('debug message')18 logger.info('info message')19 logger.warn('warn message')20 logger.error('error message')21 logger.critical('critical message')

使用设置文件和fileConfig()函数实现日志设置

#读取日志设置文件内容

logging.config.fileConfig('logging.conf')#建立一个日志器logger

logger = logging.getLogger('simpleExample')#日志输出

logger.debug('debug message')

logger.info('info message')

logger.warn('warn message')

logger.error('error message')

logger.critical('critical message')

logging.conf

[loggers]

keys=root,simpleExample

[handlers]

keys=fileHandler,consoleHandler

[formatters]

keys=simpleFormatter

[logger_root]

level=DEBUG

handlers=fileHandler

[logger_simpleExample]

level=DEBUG

handlers=consoleHandler

qualname=simpleExample

propagate=0

[handler_consoleHandler]class=StreamHandler

args=(sys.stdout,)

level=DEBUG

formatter=simpleFormatter

[handler_fileHandler]class=FileHandler

args=('logging.log', 'a')

level=ERROR

formatter=simpleFormatter

[formatter_simpleFormatter]

format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

datefmt= "%Y-%m-%d %H:%M:%S"

设置文件的说明

1)设置文件中一定要包罗loggers、handlers、formatters这些section,它们通过keys这个option来指定该设置文件中已经界说好的loggers、handlers和formatters,多个值之间用逗号分开;另外loggers这个section中的keys一定要包罗root这个值;

2)loggers、handlers、formatters中所指定的日志器、处置器和花样器都需要在下面以单独的section举行界说。seciton的命名规则为[logger_loggerName]、[formatter_formatterName]、[handler_handlerName]

3)界说logger的section必须指定level和handlers这两个option,level的可取值为DEBUG、INFO、WARNING、ERROR、CRITICAL、NOTSET,其中NOTSET示意所有级别的日志新闻都要纪录,包罗用户界说级别;handlers的值是以逗号分开的handler名字列表,这里泛起的handler必须泛起在[handlers]这个section中,而且响应的handler必须在设置文件中有对应的section界说;

4)对于非root logger来说,除了level和handlers这两个option之外,还需要一些分外的option,其中qualname是必须提供的option,它示意在logger层级中的名字,在应用代码中通过这个名字获得logger;propagate是可选项,其默认是为1,示意新闻将会通报给高层次logger的handler,通常我们需要指定其值为0,这个可以看下下面的例子;另外,对于非root logger的level若是设置为NOTSET,系统将会查找高层次的logger来决议此logger的有用level。

5)界说handler的section中必须指定class和args这两个option,level和formatter为可选option;class示意用于建立handler的类名,args示意通报给class所指定的handler类初始化方式参数,它必须是一个元组(tuple)的形式,即便只有一个参数值也需要是一个元组的形式;level与logger中的level一样,而formatter指定的是该处置器所使用的花样器,这里指定的花样器名称必须泛起在formatters这个section中,且在设置文件中必须要有这个formatter的section界说;若是不指定formatter则该handler将会以新闻自己作为日志新闻举行纪录,而不添加分外的时间、日志器名称等信息;

6)界说formatter的sectioin中的option都是可选的,其中包罗format用于指定花样字符串,默以为新闻字符串自己;datefmt用于指定asctime的时间花样,默以为’%Y-%m-%d %H:%M:%S’;class用于指定花样器类名,默以为logging.Formatter;

7)把logging.conf中simpleExample这个handler界说中的propagate属性值改为1,或者删除这个option(默认值就是1),这说明simpleExample这个logger在处置完日志纪录后,把日志纪录通报给了上级的root logger再次做处置,所有才会有两个地方都有日志纪录的输出。通常,我们都需要显示的指定propagate的值为0,防止日志纪录向上层logger通报。

8)当一个日志器没有被设置任何处置器是,系统会去查找该日志器的上层日志器上所设置的日志处置器来处置日志纪录

使用字典实现日志设置(dictconfig)

使用字典设置的时刻,能把许多的数据转换成字典。好比,我们可以使用JSON花样的设置文件、YAML花样的设置文件,然后将它们填充到一个设置字典中

importloggingimportlogging.configimportyaml

with open('logging.yml', 'r') as f_conf:

dict_conf=yaml.load(f_conf)

logging.config.dictConfig(dict_conf)

logger= logging.getLogger('simpleExample')

logger.debug('debug message')

logger.info('info message')

logger.warn('warn message')

logger.error('error message')

logger.critical('critical message')

yaml文件

version: 1formatters:

simple:

format:'%(asctime)s - %(name)s - %(levelname)s - %(message)s'handlers:

console:class: logging.StreamHandler

level: DEBUG

formatter: simple

stream: ext://sys.stdout

console_err:class: logging.StreamHandler

level: ERROR

formatter: simple

stream: ext://sys.stderr

loggers:

simpleExample:

level: DEBUG

handlers: [console]

propagate: yes

root:

level: DEBUG

handlers: [console_err]

字典设置信息的说明

key名称 形貌

version   必选项,其值是一个整数值,示意设置花样的版本,当前唯一可用的值就是1

formatters 可选项,其值是一个字典工具,该字典工具每个元素的key为要界说的花样器名称,value为花样器的设置信息组成的dict,如format和datefmt

filters    可选项,其值是一个字典工具,该字典工具每个元素的key为要界说的过滤器名称,value为过滤器的设置信息组成的dict,如name

handlers  可选项,其值是一个字典工具,该字典工具每个元素的key为要界说的处置器名称,value为处置器的设置信息组成的dcit,如class、level、formatter和filters,

其中class为必选项,其它为可选项;其他设置信息将会通报给class所指定的处置器类的组织函数,如下面的handlers界说示例中的stream、filename、maxBytes和backupCount等

loggers   可选项,其值是一个字典工具,该字典工具每个元素的key为要界说的日志器名称,value为日志器的设置信息组成的dcit,如level、handlers、filters 和 propagate

root   可选项,这是root logger的设置信息,其值也是一个字典工具。除非在界说其它logger时明确指定propagate值为no,否则root logger界说的handlers都会被作用到其它logger上

incremental 可选项,默认值为False。该选项的意义在于,若是这里界说的工具已经存在,那么这里对这些工具的界说是否应用到已存在的工具上。值为False示意,已存在的工具将会被重新界说。

disable_existing_loggers 可选项,默认值为True。该选项用于指定是否禁用已存在的日志器loggers,若是incremental的值为True则该选项将会被忽略

本文转自该博客

原文链接:https://www.cnblogs.com/seyOrd/p/12690904.html

本站声明:网站内容来源于网络,若有侵权,请联系我们,我们将及时处置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值