У меня есть приложение C ++ (на Solaris 10), которое показывает вывод журнала на основе хронологических транзакций. Например, перед установлением соединения с сервером базы данных он выводит в stdout: «Соединение с БД» и после вызова для подключения, в случае успеха, говорит «Соединено с БД», в случае неудачи говорит «не удалось соединиться с БД». » и так далее.
Теперь, когда приложение запущено, вывод (stdout) перенаправляется в файл журнала, как показано ниже:
appl > app.log
И на другой сессии, чтобы увидеть, что происходит, я рассматриваю как:
tail -f app.log
tail -f
Предполагается, что команда выполняется в бесконечном цикле, спит секунду, а затем пытается прочитать и скопировать строки из app.log и показать на консоли. Это помогает отслеживать, что происходит в app.log
В то время как я вижу, что порядок выходных данных поддерживается, я вижу, что иногда выходы объединяют много строк в виде чанка, а затем ожидают, и это происходит не в реальном времени, когда что-то происходит. Это из-за поведения сна и тяги tail -f? Пожалуйста, помогите мне понять, почему это не в режиме реального времени. Или есть какой-то другой способ почувствовать себя в реальном времени?
Попробуйте использовать команду watch для этого файла с интервалом в 5 секунд и посмотрите, имеет ли он то же поведение, что и tail. Если запись в файл app.log отсутствует в реальном времени, то аналогичным будет вывод в tail.
Других решений пока нет …