Я играю с Boost.Log в boost 1.54.0, чтобы посмотреть, подходит ли это для моего приложения. В общем, у меня нет проблем с буферизацией, поэтому я не собираюсь включать auto_flush или что-то еще... но я заметил, что сообщения, которые регистрируются до того, как я вызову fork()
, дублируются, и мне интересно, если это потому, что они буферизованы, буфер дублируется при копировании образа процесса, а затем оба процесса в конечном итоге записывают свои буферные копии в файл журнала...
Итак, в основном, я хотел бы просто выполнить ручную очистку журнала, только один раз, непосредственно перед тем, как я вызову fork()
, чтобы убедиться, что в памяти все еще нет сообщений. Другими словами, я ищу что-то вроде fflush()
, .flush()
, << flush
и т. д., что я могу использовать в журнале повышения.
Я пытался использовать << flush
с журналом, но я все еще получаю дублированные сообщения, поэтому я не уверен на 100%, вызваны ли они очисткой и дубликатами какой-то другой проблемой, или он каким-то образом молча игнорирует << flush
...
Изменить:
Я осмотрелся и обнаружил, что журнал повышения не является безопасным для форка. Поэтому я должен добавить, что я не пытаюсь использовать один и тот же журнал в родительском и дочернем процессах. У меня есть два сценария разветвления: в одном родительский процесс завершается немедленно, а дочерний непрерывен (так что это должно быть безопасно), а в другом дочерний элемент должен открывать свой собственный отдельный файл журнала, так что это также должно быть безопасным ... но я нужно выяснить, как закрыть приемник файла журнала, а затем открыть новый (в другом файле). Я полагаю, что закрытие раковины также может быть способом вызвать смыв...?