3

我在 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)

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

日志截图

如您所见,日志显示正常,但每个日志都标有“E”,即使它不是错误,也表示错误。据我所知,每次使用时都会发生这种情况

logging.config.fileConfig()

有解决这个问题的方法吗?

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

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

4

2 回答 2

0

我怀疑你的问题的原因是这样的:

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

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

于 2012-11-05T13:31:32.313 回答
0

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

于 2014-04-02T04:02:43.997 回答