python3 logging详解_python logging模块详解

2014-05-06 15:27:36,236 - mylogger.child1.child2.child3 - INFO - logger5 info message

2014-05-06 15:27:36,236 - mylogger.child1.child2.child3 - INFO - logger5 info message

2014-05-06 15:27:36,236 - mylogger.child1.child2.child3 - INFO - logger5 info message

2014-05-06 15:27:36,236 - mylogger.child1.child2.child3 - INFO - logger5 info message

2014-05-06 15:27:36,238 - mylogger.child1.child2.child3 - WARNING - logger5 warning message

2014-05-06 15:27:36,238 - mylogger.child1.child2.child3 - WARNING - logger5 warning message

2014-05-06 15:27:36,238 - mylogger.child1.child2.child3 - WARNING - logger5 warning message

2014-05-06 15:27:36,238 - mylogger.child1.child2.child3 - WARNING - logger5 warning message

2014-05-06 15:27:36,238 - mylogger.child1.child2.child3 - WARNING - logger5 warning message

2014-05-06 15:27:36,240 - mylogger.child1.child2.child3 - ERROR - logger5 error message

2014-05-06 15:27:36,240 - mylogger.child1.child2.child3 - ERROR - logger5 error message

2014-05-06 15:27:36,240 - mylogger.child1.child2.child3 - ERROR - logger5 error message

2014-05-06 15:27:36,240 - mylogger.child1.child2.child3 - ERROR - logger5 error message

2014-05-06 15:27:36,240 - mylogger.child1.child2.child3 - ERROR - logger5 error message

2014-05-06 15:27:36,242 - mylogger.child1.child2.child3 - CRITICAL - logger5 critical message

2014-05-06 15:27:36,242 - mylogger.child1.child2.child3 - CRITICAL - logger5 critical message

2014-05-06 15:27:36,242 - mylogger.child1.child2.child3 - CRITICAL - logger5 critical message

2014-05-06 15:27:36,242 - mylogger.child1.child2.child3 - CRITICAL - logger5 critical message

2014-05-06 15:27:36,242 - mylogger.child1.child2.child3 - CRITICAL - logger5 critical message

当然也可以直接给Logger加Filter。

若为Handler加Filter则所有使用了该Handler的Logger都会受到影响。而为Logger添加Filter只会影响到自身。

注释掉

[python] view plaincopy

#fh.addFilter(filter)

并取消如下几行的注释

[python] view plaincopy

#logger.addFilter(filter)

#logger1.addFilter(filter)

#logger3.addFilter(filter)

#logger4.addFilter(filter)

输出结果

2014-05-06 15:32:10,746 - mylogger.child1.child2 - DEBUG - logger4 debug message

2014-05-06 15:32:10,746 - mylogger.child1.child2 - DEBUG - logger4 debug message

2014-05-06 15:32:10,746 - mylogger.child1.child2 - DEBUG - logger4 debug message

2014-05-06 15:32:10,746 - mylogger.child1.child2 - DEBUG - logger4 debug message

2014-05-06 15:32:10,748 - mylogger.child1.child2 - INFO - logger4 info message

2014-05-06 15:32:10,748 - mylogger.child1.child2 - INFO - logger4 info message

2014-05-06 15:32:10,748 - mylogger.child1.child2 - INFO - logger4 info message

2014-05-06 15:32:10,748 - mylogger.child1.child2 - INFO - logger4 info message

2014-05-06 15:32:10,751 - mylogger.child1.child2 - WARNING - logger4 warning message

2014-05-06 15:32:10,751 - mylogger.child1.child2 - WARNING - logger4 warning message

2014-05-06 15:32:10,751 - mylogger.child1.child2 - WARNING - logger4 warning message

2014-05-06 15:32:10,751 - mylogger.child1.child2 - WARNING - logger4 warning message

2014-05-06 15:32:10,753 - mylogger.child1.child2 - ERROR - logger4 error message

2014-05-06 15:32:10,753 - mylogger.child1.child2 - ERROR - logger4 error message

2014-05-06 15:32:10,753 - mylogger.child1.child2 - ERROR - logger4 error message

2014-05-06 15:32:10,753 - mylogger.child1.child2 - ERROR - logger4 error message

2014-05-06 15:32:10,754 - mylogger.child1.child2 - CRITICAL - logger4 critical message

2014-05-06 15:32:10,754 - mylogger.child1.child2 - CRITICAL - logger4 critical message

2014-05-06 15:32:10,754 - mylogger.child1.child2 - CRITICAL - logger4 critical message

2014-05-06 15:32:10,754 - mylogger.child1.child2 - CRITICAL - logger4 critical message

2014-05-06 15:32:10,755 - mylogger.child1.child2.child3 - DEBUG - logger5 debug message

2014-05-06 15:32:10,755 - mylogger.child1.child2.child3 - DEBUG - logger5 debug message

2014-05-06 15:32:10,755 - mylogger.child1.child2.child3 - DEBUG - logger5 debug message

2014-05-06 15:32:10,755 - mylogger.child1.child2.child3 - DEBUG - logger5 debug message

2014-05-06 15:32:10,755 - mylogger.child1.child2.child3 - DEBUG - logger5 debug message

2014-05-06 15:32:10,757 - mylogger.child1.child2.child3 - INFO - logger5 info message

2014-05-06 15:32:10,757 - mylogger.child1.child2.child3 - INFO - logger5 info message

2014-05-06 15:32:10,757 - mylogger.child1.child2.child3 - INFO - logger5 info message

2014-05-06 15:32:10,757 - mylogger.child1.child2.child3 - INFO - logger5 info message

2014-05-06 15:32:10,757 - mylogger.child1.child2.child3 - INFO - logger5 info message

2014-05-06 15:32:10,759 - mylogger.child1.child2.child3 - WARNING - logger5 warning message

2014-05-06 15:32:10,759 - mylogger.child1.child2.child3 - WARNING - logger5 warning message

2014-05-06 15:32:10,759 - mylogger.child1.child2.child3 - WARNING - logger5 warning message

2014-05-06 15:32:10,759 - mylogger.child1.child2.child3 - WARNING - logger5 warning message

2014-05-06 15:32:10,759 - mylogger.child1.child2.child3 - WARNING - logger5 warning message

2014-05-06 15:32:10,761 - mylogger.child1.child2.child3 - ERROR - logger5 error message

2014-05-06 15:32:10,761 - mylogger.child1.child2.child3 - ERROR - logger5 error message

2014-05-06 15:32:10,761 - mylogger.child1.child2.child3 - ERROR - logger5 error message

2014-05-06 15:32:10,761 - mylogger.child1.child2.child3 - ERROR - logger5 error message

2014-05-06 15:32:10,761 - mylogger.child1.child2.child3 - ERROR - logger5 error message

2014-05-06 15:32:10,762 - mylogger.child1.child2.child3 - CRITICAL - logger5 critical message

2014-05-06 15:32:10,762 - mylogger.child1.child2.child3 - CRITICAL - logger5 critical message

2014-05-06 15:32:10,762 - mylogger.child1.child2.child3 - CRITICAL - logger5 critical message

2014-05-06 15:32:10,762 - mylogger.child1.child2.child3 - CRITICAL - logger5 critical message

2014-05-06 15:32:10,762 - mylogger.child1.child2.child3 - CRITICAL - logger5 critical message

发现root、mylogger、mylogger.child1的输出全部被过滤掉了。

除了直接在程序中设置Logger,Handler,Filter,Formatter外还可以

四、将这些信息写进配置文件中。

例如典型的logging.conf

[python] view plaincopy

[loggers]

keys=root,simpleExample

[handlers]

keys=consoleHandler

[formatters]

keys=simpleFormatter

[logger_root]

level=DEBUG

handlers=consoleHandler

[logger_simpleExample]

level=DEBUG

handlers=consoleHandler

qualname=simpleExample

propagate=0

[handler_consoleHandler]

class=StreamHandler

level=DEBUG

formatter=simpleFormatter

args=(sys.stdout,)

[formatter_simpleFormatter]

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

datefmt=

程序可以这么写

[python] view plaincopy

import logging

import logging.config

logging.config.fileConfig("logging.conf")    # 采用配置文件

# create logger

logger = logging.getLogger("simpleExample")

# "application" code

logger.debug("debug message")

logger.info("info message")

logger.warn("warn message")

logger.error("error message")

logger.critical("critical message")

五、多模块使用logging

logging模块保证在同一个python解释器内,多次调用logging.getLogger('log_name')都会返回同一个logger实例,即使是在多个模块的情况下。

所以典型的多模块场景下使用logging的方式是在main模块中配置logging,这个配置会作用于多个的子模块,

然后在其他模块中直接通过getLogger获取Logger对象即可。

main.py:

[python] view plaincopy

import logging

import logging.config

logging.config.fileConfig('logging.conf')

root_logger = logging.getLogger('root')

root_logger.debug('test root logger...')

logger = logging.getLogger('main')

logger.info('test main logger')

logger.info('start import module \'mod\'...')

import mod

logger.debug('let\'s test mod.testLogger()')

mod.testLogger()

root_logger.info('finish test...')

子模块mod.py:

[python] view plaincopy

import logging

import submod

logger = logging.getLogger('main.mod')

logger.info('logger of mod say something...')

def testLogger():

logger.debug('this is mod.testLogger...')

submod.tst()

子子模块submod.py:

[python] view plaincopy

import logging

logger = logging.getLogger('main.mod.submod')

logger.info('logger of submod say something...')

def tst():

logger.info('this is submod.tst()...')

[python] view plaincopy

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值