2010-06-23 55 views
6

如何更改Google App Engine中logging模块的输出格式?Google App Engine/Python - 更改记录格式

我试过,例如:

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日志处理程序(或谷歌代码的地方),以及一个从我上面的新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的格式,但避免重复输出?

谢谢您的阅读。

布赖恩

回答

10

这里是你可以更改记录格式,而无需复制输出的一种方式:

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

这是一个黑客位的,因为你必须直接访问存储在根handlers列表记录仪。问题是在您的代码运行之前,GAE会自动使用logging - 这会创建一个默认处理程序。不幸的是,我没有看到如何在不直接访问上面的handlers列表的情况下获得对该处理程序的引用。

+0

这非常有帮助。另一个选项我考虑在根记录器上运行'setLevel(logging.CRITICAL)',并创建一个新的记录器到stderr。 – 2010-06-23 23:09:37