Комментарии 8
Нагруженные приложения часто пишут логи просто в stdout, давая возможность решать проблемы с их отправкой на другом уровне. По-моему, pino наглядно показывает что происходит со сложностью в том случае, когда хочется нагородить весь этот огород внутри приложения.
Писать логи stdout в нагруженных приложениях - не вариант, т.к. это синхронный вывод, об который тормозит приложение, ест много CPU, к тому же подходит только для PULL-сбора, а не активную буферезированную отправку. А форматирование, ротацию уровни логирования - тоже полезные вещи. Или вы предлагаете всегда логи уровня TRACE в stdout выводит, а там уже разбираться что-куда?
А асинхронно писать в stdout
— запрещено законом?
В линуксах stdout это дискриптор файла - не чем не хуже остальных. Но вам не надо заботиться о ротации.
Асинхронное логирование это компромисс между перфомансом и рисками потерять накопленное, но не отправленное, в случае сбоев - т.е. самые ценные для разбора причин куски. Такие решения удобнее принимать на строне эксплуатации, а не разработки приложения. Приложение меняется чаще и в нем вероятность ошибок выше. Поэтому когда есть возможность, работу с логам лучше выносить наружу.
не чем не хуже остальных.
Хуже тем что жрет много CPU, если логов много. Если вы хотите все логи во вне обрабатывать - значит в stdout нужно все уровни логов писать, а потом сортировать, фильтровать и тд. А если через либу писать - там уже всё отфильтровано, отформатировано, буферизовано, асинхроно и тд, и может сразу в сервер сбора логов отправлять без лишних прослоек. Оптимизировал я высоконагруженные приложения - там больше половины ядер ел просто вывод в stdout.
А не подскажите в Bun Pino до сих пор не работает? Что тогда кто посоветует?
в разработке можно включить trace для максимальной детализации, а в продакшене оставить info или warn, чтобы не захламлять логи
Я немного плаваю в этом. Подскажите, если приложение не позволяет на лету (на горячую) менять уровень логирования. А если даже и поменять на трейс\дебаг - то всё встаёт колом. Получается, что и нет смысла впринципе раставлять дебаги\трейсы в коде. Верно?
Разбираем Pino: как работает самый быстрый логер для Node.js