#python #json #logging
Вопрос:
Я пытаюсь создать формат журнала, который выглядит следующим образом:
{ "DateTime" : "2021-12-01T20:49:55.798 02:00", "Level" : "INFO", "Body" : { "text" : "the log message ", "SensorID" : "46" } }
Я использовал python-json-регистратор, и мой json выглядит так :
{ "DateTime": "2021-12-01T19:08:03.599693Z", "Level": "INFO", "message": "the log message", "body": "{ sensorId :1" } }
и я до сих пор не знаю, как поместить сообщение в тело и преобразовать ключевое сообщение в текст…
Мой код до сих пор выглядит так
from pythonjsonlogger import jsonlogger from json_logging import datetime logger = logging.getLogger() logHandler = logging.StreamHandler() class CustomJsonFormatter(jsonlogger.JsonFormatter): def add_fields(self, log_record, record, message_dict): super(CustomJsonFormatter, self).add_fields(log_record, record, message_dict) if not log_record.get('DateTime'): # this doesn't use record.created, so it is slightly off now = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ') log_record['DateTime'] = now if log_record.get('Level'): log_record['Level'] = log_record['level'].upper() else: log_record['Level'] = record.levelname formatter = CustomJsonFormatter('%(DateTime)s %(Level)s %(message)s') logHandler.setFormatter(formatter) logger.addHandler(logHandler) logger.setLevel(logging.INFO) y = "{sensorId :" str(1) logger.info("the log message" , extra={"body" : y} )
Комментарии:
1. 2-й JSON недействителен, он не имеет аналогов
}
.2. О, я только что это заметил … у вас есть какие-либо предложения, как сопоставить json в коде python?
3. ты забыл
}
, что приближаешьсяy = "{sensorId :" str(1) "}"
Ответ №1:
Помогает ли это?
from pythonjsonlogger import jsonlogger from datetime import datetime import logging import json logger = logging.getLogger() logHandler = logging.StreamHandler() class CustomJsonFormatter(jsonlogger.JsonFormatter): def add_fields(self, log_record, record, message_dict): super(CustomJsonFormatter, self).add_fields(log_record, record, message_dict) if not log_record.get('DateTime'): # this doesn't use record.created, so it is slightly off now = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ') log_record['DateTime'] = now if log_record.get('Level'): log_record['Level'] = log_record['level'].upper() else: log_record['Level'] = record.levelname formatter = CustomJsonFormatter('%(DateTime)s %(Level)s') logHandler.setFormatter(formatter) logger.addHandler(logHandler) logger.setLevel(logging.INFO) msg = "the log message" logger.info({"body":{"text":msg, "sensorId":1}})
Он распечатывает:
{'DateTime': '2021-12-28T23:03:38.363401Z', 'Level': 'INFO', 'body': {'text': 'the log message', 'sensorId': 1}}