LINUX.ORG.RU

История изменений

Исправление intelfx, (текущая версия) :

А для чего?

stdout — для полезного (структурированного) вывода, stderr — для любых диагностических сообщений.

Если твоя программа не является юниксовым текстовым фильтром, то про stdout можно не вспоминать.

Хороошо, как другим способом мне разделить логи, чтобы визуально было понятно где ошибка, а где просто вывод?

Вот так: https://man.archlinux.org/man/sd-daemon.3.en#DESCRIPTION

#define SD_EMERG   "<0>"  /* system is unusable */
#define SD_ALERT   "<1>"  /* action must be taken immediately */
#define SD_CRIT    "<2>"  /* critical conditions */
#define SD_ERR     "<3>"  /* error conditions */
#define SD_WARNING "<4>"  /* warning conditions */
#define SD_NOTICE  "<5>"  /* normal but significant condition */
#define SD_INFO    "<6>"  /* informational */
#define SD_DEBUG   "<7>"  /* debug-level messages */

These prefixes are intended to be used in conjunction with stderr-based logging (or stdout-based logging) as implemented by systemd. If a systemd service definition file is configured with StandardError=journal or StandardError=kmsg (and similar with StandardOutput=), these prefixes can be used to encode a log level in lines printed. This is similar to the kernel printk()-style logging. See klogctl(2) for more information.

The log levels are identical to syslog(3)’s log level system. To use these prefixes simply prefix every line with one of these strings. A line that is not prefixed will be logged at the default log level SD_INFO.

process.stderr.write("<3>ERROR\n") нарисует строчку красным, а process.stderr.write("<4>WARNING\n") — жёлтым, и так далее.

Исправление intelfx, :

А для чего?

stdout — для полезного (структурированного) вывода, stderr — для любых диагностических сообщений.

Если твоя программа не является юниксовым текстовым фильтром, то про stdout можно не вспоминать.

Хороошо, как другим способом мне разделить логи, чтобы визуально было понятно где ошибка, а где просто вывод?

Вот так: https://man.archlinux.org/man/sd-daemon.3.en#DESCRIPTION

#define SD_EMERG   "<0>"  /* system is unusable */
#define SD_ALERT   "<1>"  /* action must be taken immediately */
#define SD_CRIT    "<2>"  /* critical conditions */
#define SD_ERR     "<3>"  /* error conditions */
#define SD_WARNING "<4>"  /* warning conditions */
#define SD_NOTICE  "<5>"  /* normal but significant condition */
#define SD_INFO    "<6>"  /* informational */
#define SD_DEBUG   "<7>"  /* debug-level messages */

These prefixes are intended to be used in conjunction with stderr-based logging (or stdout-based logging) as implemented by systemd. If a systemd service definition file is configured with StandardError=journal or StandardError=kmsg (and similar with StandardOutput=), these prefixes can be used to encode a log level in lines printed. This is similar to the kernel printk()-style logging. See klogctl(2) for more information.

The log levels are identical to syslog(3)’s log level system. To use these prefixes simply prefix every line with one of these strings. A line that is not prefixed will be logged at the default log level SD_INFO.

Исходная версия intelfx, :

А для чего?

stdout — для полезного вывода, stderr — для логов. Если твоя программа не является юниксовым текстовым фильтром, то stdout вообще не для неё.

Хороошо, как другим способом мне разделить логи, чтобы визуально было понятно где ошибка, а где просто вывод?

Вот так: https://man.archlinux.org/man/sd-daemon.3.en#DESCRIPTION

#define SD_EMERG   "<0>"  /* system is unusable */
#define SD_ALERT   "<1>"  /* action must be taken immediately */
#define SD_CRIT    "<2>"  /* critical conditions */
#define SD_ERR     "<3>"  /* error conditions */
#define SD_WARNING "<4>"  /* warning conditions */
#define SD_NOTICE  "<5>"  /* normal but significant condition */
#define SD_INFO    "<6>"  /* informational */
#define SD_DEBUG   "<7>"  /* debug-level messages */

These prefixes are intended to be used in conjunction with stderr-based logging (or stdout-based logging) as implemented by systemd. If a systemd service definition file is configured with StandardError=journal or StandardError=kmsg (and similar with StandardOutput=), these prefixes can be used to encode a log level in lines printed. This is similar to the kernel printk()-style logging. See klogctl(2) for more information.

The log levels are identical to syslog(3)’s log level system. To use these prefixes simply prefix every line with one of these strings. A line that is not prefixed will be logged at the default log level SD_INFO.