Должен ли я записывать сообщения в stderr или stdout? - PullRequest
47 голосов
/ 07 февраля 2011

У меня есть программа, которую я пишу, для которой я хочу написать пользовательское средство ведения журнала (например, диагностика, уведомление, предупреждение, ошибка).

Должен ли я использовать поток stdout или stderr для этого? Это своего рода интерпретатор, и пользователь может попросить его напечатать вывод.

Редактировать: Пожалуйста, прекратите рекомендовать мне рамки ведения журналов: (

Ответы [ 2 ]

38 голосов
/ 07 февраля 2011

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

Если нет «обычного вывода», я бы сказал, что не имеет значения, какой вы выберете. Вы можете утверждать, что логирование является единственным выходом, поэтому следует перейти к stdout. Или вы можете утверждать, что это все еще «исключительная информация», которая должна идти к stderr.

12 голосов
/ 07 февраля 2011

Вы пишете что-то еще для stdout? Если ответ Yes, тогда для кого-то будет довольно сложно различить нормальный поток и ошибки в середине файла, который использовался для перенаправления с stdout.

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

...