LINUX.ORG.RU

Ответ на: комментарий от intelfx

Пишу в STDERR - красный, остальное БЕЛЫЙ )) Как-то так - я считаю! Ну это же логично? Ну ладно цвета, но даже нет подписи из какого потока сыпется в логи, что уж совсем тупо

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

Нет, не логично.

stdout и stderr существуют не для того, чтобы писать в оба сразу сообщения разной важности.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от gobot

А для чего?

Ну вообще в stdout идёт обычный значимый вывод, а в stderr ошибки. Обычно. Всякий debug — тоже в stderr. С цветами это никак не связано. Смысл в том, чтобы можно было, например, перенаправить их в разные файлы (в том числе, например, и один в /dev/null) или пайпнуть в разные процессы и т.д. и т.п.

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

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

Просто в консоль или лог — писать сразу с цветами. В systemd-шный журнал:

echo 'OUT вот' | systemd-cat -p info
echo 'WARNING упс' | systemd-cat -p warning
echo 'ERROR ух ё' | systemd-cat -p error
CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 2)
Ответ на: комментарий от gobot

А для чего?

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 ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

Оооо... Я от этих костылей ушел и как оказывается к ним и пришел )) Я думал в journalctl это есть «изкаробки»... Собственно и начал переходить от supervisord к systemd, с одной стороны из-за этого с другой думал ещё и логи будет красить, а тут

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

При всей моей нелюбви к системд, всё же: как ему ещё догадаться, что в какой цвет тебе разукрашивать, если ему не сообщить? stderr у тебя один, а уровней важности инфы для stderr — 7. Как он поймёт, какой из 7 выбрать-то, если ты ему не скажешь?

P.S. Только не говорите Поттерингу, что у кого-то возникла такая проблема, а то придумает туда туда целую LLM встроить, которая будет анализировать само сообщение об ошибке на основе естественного языка и решать, насколько это важно.

CrX ★★★★★
()
Ответ на: комментарий от CrX

Я наверное не теми терминами оперирую. Там есть LEVEL (параметр -p), и он РАЗУКРАШИВАЕТСЯ. Это хорошо. Тогда другой вопрос, как мне записать в этот лог строчку определенного LEVEL в своем ДЕМОНЕ?

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

Что именно «есть изкаробки»? Что именно ты не хочешь «парсить вручную»?

Ты как будто сам не понимаешь, чего хочешь (кроме того, чтобы была одна кнопка «сделать за5.1сь», чего естественно в мире не бывает).

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)