Reputation: 1
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
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