У меня есть следующая системная архитектура (не может быть изменена - устаревший код): одно основное приложение вызывает одно или несколько других приложений, и эти приложения взаимодействуют по протоколу IP.
Все приложения пишут в одно консольное окно. К сожалению, вывод консоли может испортиться (один символ из приложения 1, следующий символ из приложения 2, следующий символ из приложения 4 и т. Д.).
Все приложения пишут в консоль через один Logger.dll (предоставляет функции статического ведения журнала), используя cout / cerr.
Есть ли способ, как я могу предотвратить смешанные сообщения журнала в этой настройке?
Заранее спасибо.
РЕДАКТИРОВАТЬ код добавлен:
void Logger::Log(const std::string & componentName, const std::string & Text, LogLevel logLevel, bool logToConsole, bool beep)
{
std::ostringstream stream;
switch (logLevel)
{
case LOG_INFO:
if (logToConsole)
{
stream << componentName << ": INFO " << Text;
mx_console.lock(); // this is a static boost::mutex
std::cout << stream.str() << std::endl;
std::cout.flush();
mx_console.unlock();
}
break;
case LOG_STATUS:
stream << componentName << ": STATUS " << Text;
mx_console.lock();
std::cout << stream.str() << std::endl;
std::cout.flush();
mx_console.unlock();
break;
case LOG_WARNING:
stream << componentName << ": WARNING " << Text;
mx_console.lock();
std::cout << stream.str() << std::endl;
std::cout.flush();
mx_console.unlock();
break;
default:;
}
if (beep)
Beep( 500, 50 );
}