команда tail, показывающая содержимое файла журнала не в реальном времени

У меня есть приложение C++ (на Solaris 10), которое показывает вывод журнала на основе транзакций в хронологическом порядке. Например, перед установкой соединения с сервером базы данных он печатает в stdout как: «Подключение к БД», а после вызова для подключения, в случае успеха, говорит «Подключено к БД», если не удалось, пишет: «Не удалось подключиться к БД». " и так далее. Теперь, когда приложение запускается, вывод (stdout) перенаправляется в файл журнала, как показано ниже:

appl > app.log

И на другом сеансе, чтобы увидеть, что происходит, я вижу следующее:

tail -f app.log

Команда tail -f должна выполняться в бесконечном цикле, засыпать на секунду, а затем пытаться читать и копировать строки из app.log и отображать их на консоли. Это помогает следить за тем, что происходит в app.log. Хотя я вижу, что порядок выходных данных сохраняется, я вижу, что иногда выходные данные объединяются в несколько строк в виде фрагмента, а затем ожидают, и это происходит не в режиме реального времени. Это из-за режима сна и вытягивания tail -f? Пожалуйста, помогите мне понять, почему это не в реальном времени. Или есть другой способ получить ощущение реального времени?


person Dr. Debasish Jana    schedule 16.10.2015    source источник
comment
Когда вы выводите в журнал, вы очищаете буфер каждый раз с помощью std::endl или std::flush?   -  person Galik    schedule 16.10.2015
comment
Да, это как std::cout ‹‹ какой-то лог ‹‹ std::endl; И std::endl сбрасывает вывод, на самом деле если не перенаправить в app.log, то показывает просто отлично, но при перенаправлении и просмотре из другой сессии через tail -f появляется проблема с восприятием   -  person Dr. Debasish Jana    schedule 16.10.2015
comment
Помимо задержек при tail чтении из файла (что, безусловно, является проблемой), также могут быть задержки при фактической записи ОС в файл. Буферизируется не только вывод программы, операционная система также имеет буферы при записи файлов на диск (и тогда буферы есть и у оборудования). Вся эта буферизация может означать, что данные не сразу записываются на диск.   -  person Some programmer dude    schedule 16.10.2015


Ответы (1)


Попробуйте использовать команду watch для этого файла с интервалом в 5 секунд и посмотрите, ведет ли он себя так же, как хвост. Если запись в файл app.log отсутствует в режиме реального времени, аналогичный вывод будет в хвосте.

person Suyash Srivastava    schedule 22.11.2018