仅在生产环境中忽略Python 2.7日志记录格式

时间:2018-03-06 14:07:59

标签: python-2.7 logging

我的初始化代码如下

# app.py

fmt = "%(asctime)s - %(request_id)s - %(name)s - %(levelname)s - %(message)s"
logging.basicConfig(format=fmt, level=logging.INFO)

# user controller.py
import logging
logging.info("info success getting profile for user_id " + str(id))

它适用于devstaging,甚至可以在production中使用。它在2个月前停止了。从那时起我就怀疑配置了,所以我对log_level进行了硬编码 - 这在某种程度上起了作用。它现在正在记录消息,只是与其他环境的格式不一样

例如staging

中的日志消息
2018-03-08 07:32:24,661 - API_USER_23a75d85c1a0 - root - ERROR - success getting profile for user_id 1111

但在production同样的信息将是:

ERROR:root:success getting profile for user_id 1111

我可以做些什么来调试它?

1 个答案:

答案 0 :(得分:0)

显然,如果已经配置了根记录器处理程序,logging.basicConfig生效,如果您之前登录则会发生这种情况。太糟糕了。应该是一个尖叫的大肥胖标志,“你的init没有生效!!”

我的解决方案是在调用root.handlers

之前确保basicConfig为空
root = logging.getLogger()
if root.handlers:
    root.error('haha , that\'s why the basicConfig didn\'t take effect!!')
    for handler in root.handlers:
        root.removeHandler(handler)

logging.basicConfig(format=fmt, level=self.app.config.get('LOG_LEVEL'))