Я придумал свое решение. Используйте этот метод, передайте любой документ ( dict , list , ObjectId и т. Д.) Для сериализации.
def getSerializable(doc):
# check if it's a list
if isinstance(doc, list):
for i, val in enumerate(doc):
doc[i] = getSerializable(doc[i])
return doc
# check if it's a dict
if isinstance(doc, dict):
for key in doc.keys():
doc[key] = getSerializable(doc[key])
return doc
# Process ObjectId
if isinstance(doc, ObjectId):
doc = str(doc)
return doc
# Use any other custom serializting stuff here...
# For the rest of stuff
return doc
Помимо очевидного факта, что отладочные сообщения не могут отображаться в приложении, которое уже находится в производстве, а также того факта, что я не знаю, почему вам это нужно, в этом есть пара вещей, которые действительно плохи.
Во-первых, когда вы добавляете отладочное поведение на свой сервер, механизм отладки «подключается» к процессу PHP и получает сообщения механизма об остановке в точках останова, и это ПЛОХО, потому что это снижает производительность иметь другой процесс, останавливающий или "удерживающий" синтаксический анализатор PHP.
Еще одна серьезная проблема заключается в том, что, когда установлен отладчик, по крайней мере, большинство из них, как правило, имеют неприятную привычку открывать порты на вашем сервере, потому что они не предназначены для производственных сред и, как вы знаете, любые программное обеспечение, открывающее порты на вашем сервере, открывает двери для любого хакера.
Если вам нужно иметь отладку в вашем коде, то в вашем приложении внедрите систему отладки, если она недоступна, поскольку она встроена в большинство фреймворков. Установите значение конфигурации, скажем DEBUG_ENABLED, и при выдаче исключений, если это не включен, перенаправить на мелкую страницу, иначе на уродливую страницу с отладочной информацией, но хорошо позаботьтесь о том, какую отладочную информацию вы отображаете на своем сервере. Надеюсь, это все проясняет.
РЕДАКТИРОВАТЬ Поскольку, очевидно, мой ответ недостаточно документирован, вам следует проверить эти источники
Наконец, есть одна вещь Я не сказал, поскольку думал, что это было неявно: здравый смысл не делает этого! Вы не размещаете инструменты отладки на своем производственном сервере по той же причине, по которой вы храните их в другой среде, потому что вам нужно хранить ненужные вещи подальше от него. Любой процесс, запущенный на сервере, каким бы легким он ни был, повлияет на вашу производительность.
Зачем вам такое? Отлаживайте перед развертыванием в производственной среде. Это замедлит работу приложения.
Вы никогда не должны держать это на производстве.
Вашему приложению никогда не нужно выводить "эти милые отладочные сообщения", поскольку они совсем не милы для ваших пользователей. Они являются признаком плохого тестирования и убивают доверие пользователей, особенно в среде предприятия/коммерции.
Во-вторых, чем более подробную техническую информацию вы раскрываете, тем больше вероятность того, что вас взломают (особенно если вы уже раскрываете, что в вашем коде есть проблемы!). Производственные серверы должны записывать ошибки в файлы и никогда не показывать их.
Скорость выполнения - это наименьшая забота для вас, в любом случае она будет затронута, как и память.
Вы никогда не должны показывать отладочные сообщения об ошибках на рабочем сервере. Это некрасиво для ваших пользователей, а также представляет угрозу безопасности. Я уверен, что это также сделает его немного медленнее.