Esempio n. 1
0
void LogMessages(Settings settings)
{
	LogSources sources(true);
	sources.AddDBWinReader(false);
	if (HasGlobalDBWinReaderRights())
		sources.AddDBWinReader(true);

	sources.SetAutoNewLine(settings.autonewline);

	std::ofstream fs;

	if (!settings.filename.empty())
	{
		OpenLogFile(fs, WStr(settings.filename));
		fs.flush();
	}

	auto guard = make_guard([&fs, &settings]()
	{
		if (!settings.filename.empty())
		{
			fs.flush();
			fs.close();
			std::cout << "Log file closed.\n";
		}
	});

	std::string separator = settings.tabs ? "\t" : " ";
	while (!g_quit)
	{
		auto lines = sources.GetLines();
		int linenumber = 0;
		for (auto it = lines.begin(); it != lines.end(); ++it)
		{
			if (settings.console)
			{
				if (settings.linenumber)
				{
					++linenumber;
					std::cout << std::setw(5) << std::setfill('0') << linenumber << std::setfill(' ') << separator;
				}
				OutputDetails(settings, *it);
				std::cout << separator << it->message.c_str() << "\n";
			}
			if (!settings.filename.empty())
			{
				WriteLogFileMessage(fs, it->time, it->systemTime, it->pid, it->processName, it->message);
			}
		}
		if (settings.flush)
		{
			std::cout.flush();
			fs.flush();
		}
		Sleep(250);
	}
	std::cout.flush();
}
Esempio n. 2
0
void FileWriter::Run()
{
	//todo: we need locking on Logfile, think of ClearLog() 
	size_t writeIndex = 0;
	for (;;)
	{
		while (writeIndex < m_logfile.Count())
		{
			auto msg = m_logfile[writeIndex];
			++writeIndex;
			WriteLogFileMessage(m_ofstream, msg.time, msg.systemTime, msg.processId, msg.processName, msg.text);
		}
		m_ofstream.flush();
		std::this_thread::sleep_for(std::chrono::seconds(1));
	}
}