我在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引擎仪表板中生成的日志的屏幕截图
正如您所看到的,日志显示正常,但每个日志都标有“E”,表示错误,即使它不是错误。据我所知,每次使用
时都会发生这种情况logging.config.fileConfig()
这个问题有解决方法吗?
PS:我知道还有其他方法可以配置日志记录。但我只要求fileConfig()。
更新:我尝试使用带有fileConfig()的真实文件加载并使用dictConfig(),但每次问题仍然存在。
答案 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
为我解决此问题。