Shmuel
Shmuel

Reputation: 1

Python JSON log format

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





                       

Upvotes: 0

Views: 1086

Answers (1)

Pinar
Pinar

Reputation: 86

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

Upvotes: 1

Related Questions