我在使用多个流处理程序在python 2.4中使用日志时遇到了问题。这是在运行64位内核2.6.32的linux主机上运行。
当我使用如下的基本日志记录时,它可以正常工作:
logging.basicConfig(filename=logfile, filemode="w", level=logging.INFO, datefmt='%Y-%m-%d %H:%M:%S', format=logformat)
logging.info("Hello world")
对于我当前的项目,我想要记录到文件和控制台(并最终到syslog),我无法让它工作。我没有得到任何错误,只是没有记录任何东西。日志文件已创建但为空。 (文件大小= 0)
这是我的代码:
config = {
'debug': 1,
'verbose': 1,
'logdir': '/tmp',
'logfilename': 'JobRunner.log'
}
def initLogging(config):
logfile = os.path.join(config['logdir'], config['logfilename'])
print "DEBUG: logfile=%s" % logfile
loglevel = logging.INFO
logformat = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s')
if config['debug']:
loglevel = logging.DEBUG
if not os.path.exists(config['logdir']):
os.makedirs(config['logdir'])
try:
logger = logging.getLogger('core')
filelogger = logging.FileHandler(logfile, 'w')
# dummy down my code and use the module var instead of using my loglevel var
filelogger.setLevel(logging.DEBUG)
filelogger.setFormatter(logformat)
logger.addHandler(filelogger)
except Exception, error:
print "error: %s" % error
try:
if config['verbose']:
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
console.setFormatter(logformat)
logger.addHandler(console)
except Exception, error:
print "error: %s" % error
try:
logger.info("script initiated")
logger.info("log file '%s' opened." % logfile)
except Exception, error:
print "error: %s" % error
return logger
if __name__ == "__main__":
log = initLogging(config)
log.info("Hello")
我不确定问题出在哪里。此代码与我在本网站上找到的其他几个已接受的答案相匹配。
答案 0 :(得分:0)
您还需要在记录器上设置级别:
logger.setLevel(logging.DEBUG if config['debug'] else logging.INFO)
否则,它只会配置为logging.WARNING
及以上:
>>> log = initLogging({'logdir': '/tmp', 'logfilename': 'test.log',
'debug': False, 'verbose': True})
>>> log.getEffectiveLevel()
30
>>> log.setLevel(logging.INFO)
>>> log.info('Hello')
2014-08-07 18:13:19,035 INFO Hello
>>> print open('/tmp/test.log').read()
2014-08-07 18:13:19,035 INFO Hello
如果您希望特定处理程序过滤掉消息,则仅 设置处理程序上的级别;它们最初设置为NOTSET
,以便它们可以处理记录器处理的任何内容。