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)

これは、App Engine ダッシュボードで生成されたログのスクリーンショットです。

ログスクリーンショット

ご覧のとおり、ログは問題なく表示されますが、すべてのログには、エラーではない場合でもエラーを表す「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)s引数と引数を逆にすると、%(levelname)s正常に動作するはずです。

于 2012-11-05T13:31:32.313 に答える