2013-10-21 71 views
0

logging3.pyPython记录:没有显示在终端

import sys 
import logging 
import first 
import Logger 

root = logging.getLogger() 
root.addHandler(Logger.get_streamhandler()) 
root.warning('we did something in info') 

hi = first.Foo() 
hi.baz() 

first.py

import logging 

import Logger 

first_logger = logging.getLogger(__name__) 
first_logger.parent = False 
first_logger.addHandler(Logger.get_streamhandler()) 
first_logger.info('in first') 


class Foo: 
    def __init__(self): 
     print 'making sure we are in first.Foo' 
     self.logger = logging.getLogger('foo') 
     self.logger.addHandler(Logger.get_streamhandler()) 
     self.logger.info('created Foo obj') 
    def baz(self): 
     self.logger.info('i dont know what baz is') 

Logger.py

1 import logging 
    2 import sys 
    3 
    4 
    5 ''' 
    6  NOTSET means inherit the log level from the parent logger 
    7 ''' 
    8 
    9 LEVELS = { 'debug' : logging.DEBUG, 
10    'info' : logging.INFO, 
11    'warning' : logging.WARNING, 
12    'error' : logging.ERROR, 
13    'critical': logging.CRITICAL, 
14   } 
15 
16 def getLevel(lvl): 
17  return LEVELS.get(lvl) or logging.DEBUG 
18 
19 def get_streamhandler(lvl=None): 
20  sh = logging.StreamHandler() 
21  fmt = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' 
22  sh.setFormatter(logging.Formatter(fmt)) 
23  sh.setLevel(getLevel(lvl)) 
24  return sh 

OUTPUT:
蟒LOGG ing3.py

2013-10-21 14:18:09,687 - first - INFO - in first 
2013-10-21 14:18:09,687 - root - WARNING - we did something in info 
making sure we are in first.Foo 

Foo对象的日志记录信息在哪里? < ---------------

另外,有人可以确认记录树上面是


----第一
---- ----- FOO

或者是它

---- root.first
--------------root.first.foo

回答

1

这是故意的。记录器有一个日志级别(控制台和文件分开);你可以将它们与

foo.setConsoleLevel(logging.ERROR) 
foo.setFileLevel(logging.INFO) 

等,如果您更改日志级别到logging.INFO(这是0x14的上我的Python 2.6会话)或以下,那么你将看到的日志信息。

当前日志级别以下的记录消息被抑制;只有当前级别或更高级别的消息才会通过。这意味着信息消息可以转到文件,但不转到屏幕,或者您可以更改级别进行调试以在调试时获得额外的输出等。