Google App Engine/Python - 更改日志格式

7 投票
1 回答
1543 浏览
提问于 2025-04-16 00:21

如何更改Google App Engine中logging模块的输出格式?

我尝试过,比如:

  log_format = "* %(asctime)s %(levelname)-8s %(message)s"
  date_format = "%a, %d %b %Y %H:%M:%S"

  console = logging.StreamHandler()
  fr = logging.Formatter(log_format)
  console.setFormatter(fr)

  logger = logging.getLogger()
  logger.addFilter(SuperfluousFilter())
  logger.addHandler(console)

  logger.setLevel(logging.DEBUG)
  console.setLevel(logging.DEBUG)

  logging.error("Reconfiguring logging")

但是这样会导致日志输出重复:一部分是来自google/appengine/tools/dev_appserver.py(或者Google代码中的其他地方)的日志处理器,另一部分是我上面新加的StreamHandler。上面的代码输出:

ERROR    2010-06-23 20:46:18,871 initialize.py:38] Reconfiguring logging
2010-06-23 20:46:18,871 ERROR    Reconfiguring logging

其中第一行明显是来自dev_appserver.py,而最后一行是我的代码输出的。

所以我想问的另一个问题是:如何更改Google App Engine的格式,同时避免重复输出呢?

1 个回答

11

这里有一种方法可以在不重复输出的情况下改变日志格式:

# directly access the default handler and set its format directly
logging.getLogger().handlers[0].setFormatter(fr)

这有点像小技巧,因为你需要直接访问根日志记录器中的handlers列表。问题是,GAE(谷歌应用引擎)在你的代码运行之前就自动使用logging,这会创建一个默认的处理器。不幸的是,我看不出你能在不直接访问上面提到的handlers列表的情况下,获取到这个处理器的引用。

撰写回答