我在蟒蛇瓶的应用程序,我已经加入到根logger有一个自定义格式:自定义格式不能处理格式化的日志消息
logger = logging.getLogger()
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
handler.setLevel(logging.INFO)
formatter = CustomLoggingFormatter()
handler.setFormatter(formatter)
logger.addHandler(handler)
时,我想这工作完全正常记录一些东西(logger.info()...),但是我有一个来自库的日志的问题,例如uwsgi。
这里是一个日志消息的示例:
{ “@timestamp”: “2017-09-25T06:57:45.373Z”, “水平”: “信息”, “消息” : “*运行在%s://%S:%d /%S”}
我想也许是出事了与我的格式,但是当我登录了的LogRecord这我CustomLoggingFormatter receivs,它看起来对于上面的行来说就像这样:
LogRecord:werkzeug,20,< ...>/lib/python3.5/site-packages/werkzeug/_internal.py,87,“*%s://%s:%d /%s上运行”
这里是我的CustomLoggingFormatter:
class CustomLoggingFormatter(Formatter):
data = {}
def __init__(self):
super(CustomLoggingFormatter, self).__init__()
def format(self, record):
print(record)
input_data = {}
input_data['@timestamp'] = datetime.utcnow().isoformat()[:-3] + 'Z'
input_data['level'] = record.levelname
if record.msg:
input_data['message'] = record.msg
input_data.update(self.data)
return json.dumps(input_data)
对于我的格式化工作,似乎字符串格式化必须首先解决的,但是对于没有发生的几个库。任何知道如何解决这个问题的人?
请确实显示你的自定义代码。 Formatter.format()总是需要处理一个LogRecord实例;默认实现调用'Formatter.formatMessage()'来处理实际的格式(通常使用'vars(record)'作为字典)。 –
添加了我的CustomLoggingFormatter :) – user16655
由于格式化程序实现在Python版本之间有所改变,因此您运行的是哪个版本的Python? –