НО...! Ведь если на каждый чих писать в лог, потом в этих логах ничего не найти.
2. Использовать машиночитаемый формат сообщений (json)
Рекомендация вроде ясна, удобно в дальнейшем анализировать.
Вот только куда ни посмотришь на логи, везде обычная строка, без key-value или json
3. Рекомендуют записывать контекст.
Просто сообщение "был такой то exception" не катит, т.к. не понятно с каким пользователем/действием/запросом это было связано.
Нужно записывать запрос к серверу, имя пользователя, id сессии и т.п.
НО...! В процессе выполнения "главной задачи" (обработки запроса/транзакции) обычно задача разделяется на меньшие задачи (формирует запросы к базе, выполняется дополнительная обработка данных и т.п.). Эти меньшие задачи тоже нужно отслеживать (логгировать). К ним дописывать тот же контекст, т.е. дублировать/протаскивать контекст в сообщениях? С другой стороны, если вообще не указывать контекст, то как связать эту внутреннюю подзадачу с "главным" запросом при разборе проблем.
4. Держать все логи рядом (вместе)
Это понятно. Но иногда выделяют отдельные лог файлы для ошибок, например. Также удобно собирать логи с нескольких машин где-то на удаленном сервере.
5. Собирать метрики
Например, времени выполнения запросов, процент отказов и т.п.
НО.... Чтобы такое делать надо вообще отдельную подсистему писать — для расчета этих метрик. Как это на практике, непонятно.
Как ЭТО происходит у вас? Поделитесь своими практиками/правилами?