0

I am trying to do a log format that looks like this:

    {
      "DateTime" : "2021-12-01T20:49:55.798+02:00",
      "Level" : "INFO",
      "Body" : {
          "text" : "the log message ",
          "SensorID" : "46"
      }
    }

I used python-json-logger and my json looks like this :

  {
    "DateTime": "2021-12-01T19:08:03.599693Z", 
    "Level": "INFO",
    "message": "the log message",
    "body": "{
     sensorId :1"
    }
  }

and I still do not know how do I put the message inside the body and change the key message into text...

My code so far looks like this

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





                       
3
  • 1
    The 2nd JSON is not valid, it has an unmatched }. Commented Dec 1, 2021 at 19:20
  • Oh I just noticed that ... do you have any suggestion how to match between the jsons in a python code? Commented Dec 1, 2021 at 19:31
  • you forgot closing } in y = "{sensorId :" + str(1) + "}" Commented Dec 2, 2021 at 5:13

1 Answer 1

1

Does this help?

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

It prints out:

{'DateTime': '2021-12-28T23:03:38.363401Z',
 'Level': 'INFO',
 'body': {'text': 'the log message', 'sensorId': 1}}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.