logging.fileConfig()在Google应用引擎上表现得很奇怪

时间:2012-11-03 05:31:21

标签: python google-app-engine logging

我在Google应用引擎上有一个简单的webapp2应用。这是代码

# log.py.........................................................................
logging_defaults = {
    'loglevel': 'DEBUG',
}
logging_config = """\
[loggers]
keys=root

[handlers]
keys=stderr

[formatters]
keys=default

[logger_root]
level=%(loglevel)s
handlers=stderr

[handler_stderr]
class=StreamHandler
level=NOTSET
formatter=default
args=(sys.stderr, )

[formatter_default]
format=%(asctime)s %(levelname)s %(name)s:%(lineno)d %(message)s
datefmt=
"""

import logging
import logging.config
import logging.handlers
from cStringIO import StringIO
config_file = StringIO(logging_config)
logging.config.fileConfig(config_file, logging_defaults)
l = logging.getLogger(__name__)

# helloworld.py......................................................

import webapp2
from log import l

class MainPage(webapp2.RequestHandler):
  def get(self):
      l.debug('debug message')
      l.info('info message')
      l.warn('warn message')
      l.error('error message')
      l.critical('critical message')
      self.response.headers['Content-Type'] = 'text/plain'
      self.response.write("hello me!! It's me here ;)")

app = webapp2.WSGIApplication([('/', MainPage)],
                              debug=True)

这是在app引擎仪表板中生成的日志的屏幕截图

log-screenshot

正如您所看到的,日志显示正常,但每个日志都标有“E”,表示错误,即使它不是错误。据我所知,每次使用

时都会发生这种情况
logging.config.fileConfig()

这个问题有解决方法吗?

PS:我知道还有其他方法可以配置日志记录。但我只要求fileConfig()。

更新:我尝试使用带有fileConfig()的真实文件加载并使用dictConfig(),但每次问题仍然存在。

2 个答案:

答案 0 :(得分:0)

我怀疑你问题的原因是:

[formatter_default]
format=%(asctime)s %(levelname)s %(name)s:%(lineno)d %(message)s

这与App Engine的默认日志格式不同,后者将级别放在第一位,然后是日期时间。因此,App Engine管理控制台无法解析您的日志消息以确定每个日志条目的级别,因此默认为错误。反转%(asctime)s%(levelname)s参数,它应该可以正常工作。

答案 1 :(得分:0)

我最近遇到了同样的问题, 使用google.appengine.api.app_logging.AppLogsHandler代替StreamHandler为我解决此问题。