我有一个简单的Python脚本,使用内置的logging
。Python - 避免在函数之间传递记录器引用?
我正在配置函数内的日志记录。基本结构是这样的:
#!/usr/bin/env python
import logging
import ...
def configure_logging():
logger = logging.getLogger("my logger")
logger.setLevel(logging.DEBUG)
# Format for our loglines
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
# Setup console logging
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
logger.addHandler(ch)
# Setup file logging as well
fh = logging.FileHandler(LOG_FILENAME)
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
def count_parrots():
...
logger.debug??
if __name__ == '__main__':
logger = configure_logging()
logger.debug("I'm a log file")
parrots = count_parrots()
我可以从里面__main__
调用记录的罚款。但是,如何从count_parrots()函数内部调用记录器?处理像这样配置记录器的最pythonic方式是什么?
好的,所以我可以在每个需要记录的函数的开头调用logging.getLogger。似乎有点浪费和重复肯定?很公平。或者,我会更好地面向对象,并试图将整个过程整合到一个类中去? (我知道这是一个非常普遍的问题,我只是在寻找Python世界中的成就)。 – victorhooi 2011-05-17 02:30:54
你可以把你的函数放在一个类中,使用logger作为实例变量,或者(我更喜欢)创建一个装饰器,将日志函数添加到你的单个函数中 – 2011-05-19 12:17:16
这个答案显示了Python'logging'几乎所有的错误。模块... – rkrzr 2014-04-30 15:04:17