У меня есть приложение, которое должно регистрировать каждую транзакцию. Каждое сообщение журнала сбрасывается, потому что мы должны иметь запись о том, что произошло до сбоя. Мне и моим коллегам было любопытно, как добиться эффекта производительности буферизации, гарантируя, что сообщение журнала вышло из процесса.
Что мы придумали это:
- сделать FIFO, в который приложение может написать, и
- перенаправить содержимое этого FIFO в обычный файл через
cat
.
То есть то, что обычно было:
app --logfile logfile.txt
сейчас:
mkfifo logfifo
cat logfifo &> logfile.txt &
app --logfile logfifo
Есть ли какие-либо ошибки в этом подходе? Это сработало, когда мы протестировали его, но мы хотим быть абсолютно уверены, что сообщения попадут в файл перенаправления даже в случае сбоя исходного приложения.
(У нас нет исходного кода для приложения, поэтому о программных решениях не может быть и речи. Кроме того, приложение не будет записывать в него stdout
, поэтому вопрос о передаче напрямую другой команде исключен. Поэтому syslog
это невозможно .)
Обновление: я добавил награду. Принятый ответ будет не включать в себя logger
по той простой причине , что logger
это не то , что я спросил о. Как говорится в первоначальном вопросе, я ищу только ошибки в использовании FIFO.