66 lines
1.2 KiB
C++
66 lines
1.2 KiB
C++
|
#include "Log.h"
|
||
|
|
||
|
#include "Platform.h"
|
||
|
#include "StringUtils.h"
|
||
|
#include "ProcessUtils.h"
|
||
|
|
||
|
#include <string.h>
|
||
|
#include <iostream>
|
||
|
|
||
|
Log m_globalLog;
|
||
|
|
||
|
Log* Log::instance()
|
||
|
{
|
||
|
return &m_globalLog;
|
||
|
}
|
||
|
|
||
|
Log::Log()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
Log::~Log()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void Log::open(const std::string& path)
|
||
|
{
|
||
|
m_mutex.lock();
|
||
|
m_output.open(path.c_str(),std::ios_base::out | std::ios_base::app);
|
||
|
m_mutex.unlock();
|
||
|
}
|
||
|
|
||
|
void Log::writeToStream(std::ostream& stream, Type type, const char* text)
|
||
|
{
|
||
|
// Multiple processes may be writing to the same log file during
|
||
|
// an update. No attempt is made to synchronize access to the file.
|
||
|
//
|
||
|
// Under Unix, appends to a single file on a local FS by multiple writers should be atomic
|
||
|
// provided that the length of 'text' is less than PIPE_BUF
|
||
|
//
|
||
|
switch (type)
|
||
|
{
|
||
|
case Info:
|
||
|
stream << "INFO ";
|
||
|
break;
|
||
|
case Warn:
|
||
|
stream << "WARN ";
|
||
|
break;
|
||
|
case Error:
|
||
|
stream << "ERROR ";
|
||
|
break;
|
||
|
}
|
||
|
stream << '(' << intToStr(ProcessUtils::currentProcessId()) << ") " << text << std::endl;
|
||
|
}
|
||
|
|
||
|
void Log::write(Type type, const char* text)
|
||
|
{
|
||
|
m_mutex.lock();
|
||
|
writeToStream(std::cerr,type,text);
|
||
|
if (m_output.is_open())
|
||
|
{
|
||
|
writeToStream(m_output,type,text);
|
||
|
}
|
||
|
m_mutex.unlock();
|
||
|
}
|
||
|
|