Вы можете использовать json_log_formatter .Вы можете установить его следующим образом:
pip install JSON-log-formatter==0.2.0
В django вам необходимо обновить настройки журналов следующим образом:
LOGGING = {
...
'formatters': {
"json": {
'()': 'json_log_formatter.JSONFormatter',
}
},
...
}
И использовать его в своем коде следующим образом:
import logging
logger_name = 'some_name'
logger = logging.getLogger(logger_name)
logger.info('Sign up', extra={'referral_code': '52d6ce'})
Здесь дополнительный параметр, передаваемый здесь, будет отображаться в журнале следующим образом (из документации):
{
"message": "Sign up",
"time": "2015-09-01T06:06:26.524448",
"referral_code": "52d6ce"
}
Переопределить Json Log Formatter
Вы можете переопределить json_log_formatter.JSONFormatter
класс, чтобы добавить дополнительную информацию, такую как IP-адрес, если это необходимо.Как это:
import json_log_formatter
class CustomJsonFormatter(json_log_formatter.JSONFormatter):
def json_record(self, message, extra, record):
request = extra.pop('request', None)
if request:
extra['IP_ADDRESS'] = request.META.get('HTTP_X_FORWARDED_FOR') # or other ways to get ip
return super(CustomJsonFormatter, self).json_record(message, extra, record)
# usage
logger.info('Sign up', extra={'referral_code': '52d6ce', 'request': request }) # django request object
# Django Settings
'formatters': {
"json": {
'()': 'path.to.CustomJsonFormatter',
}