Не безопасен.
Вы защитили мьютексом только запись в очередь (push), но не чтение из нее (pop). Так что очередь сломается рано или поздно.
Вообще тут лучше бы подошла какая-то специализированная структура со встроенной поддержкой многопоточности, а не стандартные контейнеры.
Можно использовать кольцевой буфер или очередь майкла-скотта. В booste, на сколько помню, есть и то и другое.
Но для начала сгодится и такой вариант.
Кроме того для вывода на экран в Линукс можно учитывать тот факт, что ОС обеспечивает атомарную запись в консоль для буфера менее PIPE_BUF байт.
https://linux.die.net/man/7/pipe
Думаю в винде то же есть похожая гарантия, но это не точно.
Кроме того, операция
<<
для логгирования не очень подходит, т.к. вынуждает использовать конструкции типа:
oss << "Error: " << strerror(err) << "(" << err << ")";
для вывода 1 строки. А это уже не одна запись в очередь, а несколько. Так что защита мьютексом тут не будет гарантией вывода целостной строки.
Для логгера больше подойдет вариант типа std::printf, когда в один вызов передается вся информация для генерации целой строки.