Должен ли я записывать сообщения в stderr или stdout?
У меня есть программа, которую я пишу, что я хочу написать собственное средство ведения журнала (например, диагностика, уведомление, предупреждение, ошибка).
Должен ли я использовать поток stdout
или stderr
для этого? Это интерпретатор сорта, и пользователь может попросить его распечатать вывод.
Изменить: Пожалуйста, прекратите рекомендовать мне фреймворки регистрации: (
Ответы
Ответ 1
Регулярный вывод (фактический результат запуска программы) должен идти на stdout
, такие вещи, как вы упомянули (например, диагностика, уведомление, предупреждение, ошибка) на stderr
.
Если нет "регулярного вывода", я бы сказал, что на самом деле не важно, какой из них вы выберете. Вы можете утверждать, что журнал является единственным выходом, поэтому он должен перейти в stdout
. Или вы можете утверждать, что это все еще "исключительная информация", которая должна перейти к stderr
.
Ответ 2
Вы пишете что-то еще до stdout
? Если ответ Yes
, то было бы довольно сложно отличить обычный поток от ошибок в середине файла, который использовался для перенаправления из stdout
.
Что делать, если stdout
будет использоваться как вход для другой программы? Будет ли это возможность анализировать эту отладочную информацию? В этом случае было бы хорошо написать только критические ошибки stderr
. Если вам нужно написать что-то еще, вы можете рассмотреть возможность записи в дополнительный файл журнала.