Вход, когда и что?

Понял, что мне нужно использовать import pdb; pdb.set_trace() в другом, чтобы выяснить, что Google на самом деле возвращает мне. Оказывается, я был прав, было какое-то дополнительное вложение, о котором я не знал. print(u'Transcript: {}'.format(result._result.results[0].alternatives[0].transcript)) сделал свое дело.

8
задан David Basarab 11 October 2008 в 17:03
поделиться

6 ответов

1 - Сделайте единственный журнал со стандартизированным форматом. Не имеет значения очень, каково это, но удостоверьтесь, что когда-либо запись имеет те же основные поля. Просто вызов "printf", вероятно, не сократит его (замените System.err.println или безотносительно как соответствующим),

2 - Позвольте, чтобы по крайней мере одно поле было произвольной строкой... разработчик будет знать лучше затем Вас что потребностями быть там.

3 - Включайте метку времени высокого разрешения в каждую запись. Вы будете нуждаться в нем в конечном счете, доверять мне.

4 - Если возможно, включайте номер документа и номер строки источника ошибки. Это легко в C и чем-то вроде боли в Java. Но невероятно полезно позже, особенно когда люди запускают к коду cut+paste, включая сообщения об ошибках.

5 - Удостоверьтесь, что журнал в месте, что любой уровень кода может использовать его.

6 - Я часто использовал "Основные" и "Вторичные" ошибочные теги, где "Основной" средства, что "я - парень, который обнаружил существует проблема", и "Вторичный" означает, что "Я вызвал функцию, которая сообщила об ошибке". Это помогает найти источник проблемы ("Основной: файл не нашел"), и все еще сообщите о значении ошибки ("Вторичный: не может загрузить калибровочную таблицу").

7 - Включайте некоторую возможность зарегистрировать неошибки, а также ошибки.

Самая твердая находка первой части - когда ошибка является не обязательно ошибкой. Если Вы вызываете функцию с файлом, и файл не делает существует, который является ошибкой, которая должна быть зарегистрирована или нет? Иногда это - критический отказ, и иногда это ожидается. Это в значительной степени до API функции; если функция будет иметь способ возвратить ошибку, то у меня обычно будет она, делают это без входа; затем это - задание высокоуровневого кода, чтобы решить, должно ли это сообщить, что ошибка или если это ожидается.

6
ответ дан 5 December 2019 в 13:02
поделиться

Прежде всего захватите себя платформа журналирования - Вы не упомянули определенного языка, но любая из платформ, базирующихся вокруг Apache log4j, была бы безопасной ставкой. Самая важная вещь состоит в том что разные уровни поддержки платформы многословия (сообщения отладки, предупреждения, сообщения об ошибках). Можно настроить регистратор во время выполнения, относительно которого сообщений он на самом деле запишет, и туда, где - нет никакого смысла изобретающего велосипед для работы с входом.

Реализуйте свою платформу журналирования в Вашем источнике. Как минимум, необходимо надеяться записывать и затем "увеличивать стоимость" исключений, которые могут произойти в приложении. Запись отслеживания стека к файлу журнала является всем хорошо и хороший, но это очень достаточно редко, чтобы смочь диагностировать проблему - рассматривают регистрирующиеся вещи как значение параметров метода в выгоде {}.

В более высоком уровне можно использовать питание разных уровней многословия для записи что это происходящий в приложении. Это особенно полезно, если ошибки только происходят в производственных системах, где Вы не можете присоединить удаленный отладчик - можно просто увеличить уровень многословия в файле конфигурации платформы журнала и смотреть как вся отладка ("Вызывающий метод X с параметром Y"), сообщения появляются в журнале.

6
ответ дан 5 December 2019 в 13:02
поделиться

Я только хотел бы добавить маленький бит, который для большого важнейшего приложения, где проблемы могут только быть исследованы, когда-то развернулся, через справку журналов, отправленных через клиенты, хорошее чувство того, когда и то, где зарегистрироваться, идет со временем, поскольку приложение назревает (где зрелость непосредственно связана на сумму времени, приложение тратит развернутый и используемый в одном месте и количестве различного развертывания его [в различных клиентах/местоположениях]).

1
ответ дан 5 December 2019 в 13:02
поделиться

AOP действительно полезен для ненавязчивого входа. Например, можно использовать AOP для входа значений параметров и возвращаемого значения каждого вызова метода, на самом деле не добавляя регистрирующиеся операторы к каждому методу.

Определенные детали того, как сделать это, очевидно, зависят от Вашего выходного языка и платформы (который Вы не указывали). Для примера того, как добавить такой регистратор к Java основанное на Spring приложение, посмотрите здесь.

0
ответ дан 5 December 2019 в 13:02
поделиться

Пока Вы не должны платить очень за производительность, вход важен.

По моему опыту, самыми важными вещами, которые Вы хотите зарегистрировать, являются подобные предупреждения, ООП, отказы проверки работоспособности, сценарии дождливого дня, и т.д., который каждый склонен пропускать при кодировании сценариев солнечного дня и иногда отказывается от них прочь с печатью, "Мы не должны добираться здесь", и т.д. Эти вещи имеют тенденцию не появиться во время тестирования, но начать открываться во время развертывания, где они, конечно, не получены.

Если Вы регистрируете и намереваетесь считать результаты удаленным, удостоверьтесь, что получили точную метку времени, местоположение и своего рода идентификатор сессии (в случае, если существует несколько экземпляров, работающих одновременно и пишущих в файл журнала). Чем легче это для Вас для определения, какие сообщения являются частью одного выполнения, тем лучше Вы.

Ошибочные уровни и типы также важны. Также важно сделать поиск, чтобы удостовериться, что Вы не пишете то же сообщение из нескольких местоположений, или трассировка будет трудной.

Наконец, будьте чрезвычайно осторожны относительно регистрирующихся ошибок, если Ваши пользователи запускают Mac OS X: по некоторой странной причине, даже в Leopard, механизм входа значения по умолчанию обрабатывается дорого, и могут тонны пожирателя ресурсов ЦП.

0
ответ дан 5 December 2019 в 13:02
поделиться

Мы разрабатываем большую основанную на телефонии систему, которая используется во всем мире и использовала нашу собственную систему регистрации для приложений в течение многих лет. Уровни отладки очень важны, и наша поставка приложений с набором отладки к "ошибкам только", с журналом в файл включила на всех кроме самого чувствительного ко времени. Мы также поддерживаем отклонение нашего вывода к системе трассировки отладки (это - Windows, таким образом, это - простой вызов к OutputDebugString, и у наших инженеров есть доступ к ловцу отладки под названием DBWIN32). Это важно, потому что некоторые классы ошибок требуют, чтобы Вы смогли видеть вывод из нескольких приложений, сериализированных. Я решил некоторые серьезно хитрые ошибки взаимодействия несколько приложения приложением этой техники. Приложения обычно добавляют человекочитаемый тег к выводу, таким образом, мы можем сказать, какая строка прибыла из который приложение для этого сценария.

Уровни, которые мы используем, обычно: Прочь, Ошибки только, основной, подробный, "подробный" (где подробный заполнитель, подразумевающий несколько вещей как результаты опроса, пользовательские операции, содержимое сообщения и т.д. - независимо от того, что автор думает, важно).

О, и первой вещью, которую приложение пишет в его файл журнала, является заголовок, дающий его ресурс версии, таким образом, мы можем сказать то, что создает, мы имеем дело с - не доверяют пользователю или локальному инженеру для знания :-)

0
ответ дан 5 December 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: