我有一个python代码(下面),它发出了下面的错误,我不明白问题出在哪里。据我所知,从这个python HOWTO记录器应该可用于定义记录器的main()调用的例程。我使用python 2.7.10。记录器不被本地函数识别
#!/usr/bin/python
import logging
import sys
def setup():
logger.debug('some text')
return 0
def main():
logger = logging.getLogger('some_logger_name')
logger.setLevel(logging.DEBUG)
consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.DEBUG)
consoleHandler.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))
logger.addHandler(consoleHandler)
ret = setup()
if __name__=='__main__':
sys.exit(main()) # Exit python upon execution of main().
以下是错误消息我收到运行$python test.py
:
Traceback (most recent call last):
File "test.py", line 20, in <module>
sys.exit(main()) # Exit python upon execution of main().
File "test.py", line 17, in main
ret = setup()
File "test.py", line 7, in setup
logger.debug('some text')
NameError: global name 'logger' is not defined
是否有任何人看到我的错误?
编辑: 感谢迄今为止的回复!你能否解释一下我的版本和上面提到的python HOWTO之间的区别(我附上了下面的相关摘录)。
如果你的程序是由多个模块组成,这里有一个如何你可以在它举办的日志记录的例子:
# myapp.py
import logging
import mylib
def main():
__logging.basicConfig(filename='myapp.log', level=logging.INFO)
__logging.info('Started')
__mylib.do_something()
__logging.info('Finished')
if __name__ == '__main__':
__main()
这里的模块mylib.py
:
# mylib.py
import logging
def do_something():
__logging.info('Doing something')
如果运行myapp.py,你应该在myapp.log看到:
INFO:root:Started
INFO:root:Doing something
INFO:root:Finished
这是希望你期望看到的。您可以使用mylib.py中的模式将其推广到多个模块。
Arg,对于奇怪的编辑抱歉。我没有看到我应该如何使用格式引用的代码。
@Iafferc非常感谢! – mabe