python日志记录和处理程序的使用
问题描述:
我想了解python日志记录的工作方式。python日志记录和处理程序的使用
我知道这是一个适用于整个正在运行的解释器的单例实例。
我有这样的功能:
def setup_logging(options=None):
'''setup the logger and return it'''
logging.basicConfig(level=logging.WARNING,
format='%(levelname)s: %(message)s',
filename='/tmp/pluser.log')
logger = logging.getLogger('pluser')
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
print(console.level)
logger.addHandler(console)
return logger
,我称之为使用这样的:
console = setup_logging(options)
console.debug('Initializing database')
connect_to_db()
console.debug('Database initialized')
(这是做更多的日志记录到不同的地方准备)现在
,“控制台“是一个”logging.Logger“实例。 它有一个StreamHandler。该流处理程序的级别为10(即logging.DEBUG)。 但是,StreamHandler似乎没有得到消息,因为事物只能在console.warning,error或critical中打印到控制台(应该有stderr和stdout)。
因此,我明显错过了记录器与系统或StreamHandler进行交互的方式。
我的目标是当StreamHandler的级别调试时,所有内容都打印到控制台,但我也想知道为什么这不起作用。
答
好了,这是在这里找到答案:logging setLevel, how it works
总结:您添加处理程序需要记录器是在您的处理程序或更低的水平,否则以前被传递到记录器拒绝邮件处理程序。
所以我必须做的是将我的basicConfig默认设置为DEBUG,而不是WARNING。如果我然后想添加另一个处理程序,只处理警告和以上,我会这样做,而不是保持默认。
我添加了“logging.StreamHandler(sys.stdout),然后它在连续打印3次,如果我做console.warning,但仍然不打印在调试。 – qkslvrwolf 2013-04-09 16:47:23