Google App Engine/Python - 更改日志格式
如何更改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
列表的情况下,获取到这个处理器的引用。