我在蟒蛇瓶的應用程序,我已經加入到根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? –