Формат журнала Python JSON

#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}}